0

ini4j를 사용하여 폴더 아이콘을 변경하려고합니다. (의 아이콘 폴더) ini4j로 폴더 아이콘을 변경하면 액세스가 거부 된 예외가 발생합니다.

  • F - avi.ico \ TBD \ ChangeICon \ 아이콘 \ : \ TBD \ ChangeICon 나 \ \ 바탕 화면

    나는 다음과 같은 파일 구조

    • F 있습니다.

      [.ShellClassInfo] 
      IconResource=C:\Windows\system32\SHELL32.dll,4 
      

      내가 hardc : - INI

    있는 Desktop.ini는 다음과 같은 데이터가 (폴더 내가 아이콘을 변경해야합니다) 아래의 자바 메소드에서 아이콘과 폴더를 oded하고 파일 이름과 아이콘 경로 문자열을 복사하면 로 이동하여 액세스 할 수 있습니다. windows 시작 >> 실행. 나는 길이 잘못되었다고 생각하지 않는다. 내가 심판 1 (코드에서 심판 주석 참조)에서 응용 프로그램을 실행할 때 나는 INI (REF 1에서)의 값을 검사 할 경우

    :

    {.ShellClassInfo=[{IconResource=[C:Windowssystem32SHELL32.dll,4]}]} 
    

    다시이 경기를 어떤 값은 INI에 위의 파일.

    그리고 나는 (REF3에게 내가 가게 방법은 예외를 throw를 호출 할 때 사실의 값이 있지만

    {.ShellClassInfo=[{IconResource=[F:/TBD/ChangeICon/Icons/avi.ico,0]}]} 
    

    을 변경 않았 음을 볼 수있는 값 (설정 2)을 설정하려고

    private boolean setIniValue2() { 
        final String filename = "F:/TBD/ChangeICon/Me"; 
        final String icon = "F:/TBD/ChangeICon/Icons/avi.ico"; 
        try {   
         Ini ini = new Ini(new File(filename + "/" + "desktop.ini")); // REF1   
         ini.put(".ShellClassInfo", "IconResource", icon + ",0");  // REF2 
         ini.store(); 
         return true; 
        } catch (FileNotFoundException e) {         // REF3 
         e.printStackTrace(); 
         throw new RuntimeException("Error finding file: " + filename + " when trying to change icon", e); 
        } catch (IOException e) { 
         e.printStackTrace(); 
         throw new RuntimeException("Error accessing file: " + filename + " when trying to change icon", e); 
        } 
    } 
    

    예외 :

    java.io.FileNotFoundException: F:\TBD\ChangeICon\Me\desktop.ini (Access is denied) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(Unknown Source) 
    at java.io.FileOutputStream.<init>(Unknown Source) 
    at org.ini4j.Ini.store(Ini.java:144) 
    at org.ini4j.Ini.store(Ini.java:129) 
    at za.co.chrispie.io.wrappers.ini.ini4JWrapper.setIniValue2(ini4JWrapper.java:48) 
    at za.co.chrispie.io.wrappers.ini.ini4JWrapper.setFolderIcon(ini4JWrapper.java:21) 
    at za.co.chrispie.TestChangeIcon.testChangeFolderIcon(TestChangeIcon.java:14) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at junit.framework.TestCase.runTest(TestCase.java:168) 
    at junit.framework.TestCase.runBare(TestCase.java:134) 
    at junit.framework.TestResult$1.protect(TestResult.java:110) 
    at junit.framework.TestResult.runProtected(TestResult.java:128) 
    at junit.framework.TestResult.run(TestResult.java:113) 
    at junit.framework.TestCase.run(TestCase.java:124) 
    at junit.framework.TestSuite.runTest(TestSuite.java:232) 
    at junit.framework.TestSuite.run(TestSuite.java:227) 
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
    

    나는 메모장에있는 Desktop.ini 파일을 열고 아래와 같이로 편집 할 수 있습니다 저장하고 아이콘이 변경됩니다.

    [.ShellClassInfo] 
    IconResource=F:\TBD\ChangeICon\Icons\avi.ico,0 
    

    왜 Java 프로그램이 ini 파일을 변경할 권한이 없습니까?

  • 답변

    0

    이것은 java의 문제가 아닙니다. 그것은 창문의 문제입니다.

    나는 당신이 명령 프롬프트에서 자바를 실행하고 아마도 당신의 메모장보다 다른 보안 권한을 가지고 있다고 생각합니다. 관리자 권한으로 프로그램을 실행하십시오. 나는 지금 창문에 없다. 그래서 나는 그것을 검사 할 수 없다. 그러나 내가 기억하는 한, 창 껍질에 명령 ranas가 있다는 것을 기억한다.

    +0

    알렉스 스프링 툴 스위트에서 실행하고 있습니다. 나는 JUnit 테스트 클래스와 메인 패키지에서 STS 내부의 자바 애플리케이션으로 시도했다. 이 작업을 수행하려면 STS 액세스를 어떻게 허용합니까? – Chrispie