2011-09-12 2 views
4

특정 디렉토리에 대한 파일 생성 권한을 확인해야합니다. (나는이 FS 권한 만 명시 적으로 구성해야합니다 일부 JVM 설정을 기본 어떨지를 판정 이해 한까지로)Java에서 파일 생성 권한을 확인하는 가장 좋은 방법은 무엇입니까

try { 
    AccessController.checkPermission(new FilePermission("directory_path", "write")); 
    // Have permission 
} catch (SecurityException e) { 
    // Doesn't have permission 
} 

을 ... 그러나 이것은 항상, SecurityException를 슬로우합니다 :

은 내가 시도했습니다.

또 다른 가능한 방법은 같은 것을 사용하는 것이 었습니다 :

File f = new File("directory_path"); 
if(f.canWrite()) { 
    // Have permission 
} else { 
    // Doesn't have permission 
} 

을 ...하지만 난 (지정된 디렉토리에 파일을 만들 수 없습니다 예를 들어 내가있는 파일을 만들 수 없습니다 경우에도이가 true를 돌려 "C : \" 관리자 권한이없는 사용자로 내 앱을 실행할 때 f.canWrite()가 true를 반환합니다.

File f = new File("directory_path"); 
try { 
    File.createTempFile("check", null, f).delete(); 

    // Have permission 
} catch (IOException e) { 
    // Doesn't have permission 
} 

을 ...하지만 클라이언트의 FS에 대한 거의 모든 폴더에 대해 이러한 권한을 얻을 필요가 있기 때문에이 임시 솔루션으로 만 역할을 할 수있다 :

은 결국 나는이에 대한 해킹과 유사한 완료했습니다.

누구나 위에서 설명한 성능 문제와 해킹없이 REAL 파일 생성 권한을 멋지게 얻는 방법을 알고 있습니까?

답변

1

리소스의 가용성/유용성을 테스트하는 가장 좋은 방법은 리소스를 사용하는 것입니다. 이 경우 new FileOutputStream(new File(dir, name)). 디렉토리가 쓰기 가능하지 않거나 파일이 이미 존재하고 쓰기 불가능한 경우 등 IOException을 던집니다. 운영체제는 해당 코드를 실행할 때 이미 모든 검사를 수행해야합니다. 시도 할 때 아무런 의미가 없습니다. 모든 것을 복제 할 수 있으며 100 % 맞지는 않을지라도 비동기 활동으로 인해 이전의 '참'조건이 '거짓'이 될 수있는 타이밍 윈도우를 도입하고 있습니다. 어쨌든 파일 생성시 예외를 잡아야하고이를 처리하기 위해 catch 블록에 코드를 작성해야합니다.

+0

설명하신 내용은 기본적으로 제 3 목록에있는 것과 같습니다. 필자는 PC에 존재하는 거의 모든 파일에 대한 파일 생성 권한을 수집해야한다고 말했기 때문에이 정보를 사용하여 분석하고 나중에 이러한 디렉토리 중 일부에서 파일을 생성합니다. 이것은 내가이 "비동기 활동"의 가능성을 가질 것이라는 것을 의미하며 나는 이것으로 괜찮습니다. 문제는 모든 폴더에서 파일을 만들거나 제거하는 것만으로도 권한이 좋은 것처럼 보이지 않는다는 것입니다. –

관련 문제