2012-07-31 2 views
1

일부 디렉토리 및 파일을 생성해야하며 권한 0600이 있어야합니다. 012B실행할 때 NetBeans 디버그 : 일부를 저장하려고하면 디렉토리를 만든 후 파일 거기에 "권한이 거부되었습니다"메시지와 함께 IOException 얻을 동일한 디렉터리와 파일을 동시에 동일한 응용 프로그램과 동일한 사용자가 만들 수 있으므로 0600 (소유자 읽기/쓰기) 작동합니다.
Jar 파일을 실행할 때 chmod가 전혀 작동하지 않습니다!Java IOException : 소유자 권한으로 실행 중일 때 리눅스에서 권한이 거부되었습니다.

if(!Dest.exists()){ 
    boolean res=dirs.mkdirs(); 
    if(res){ 
     Runtime.getRuntime().exec("chmod -R 600 '"+dirs.getAbsolutePath()+"'");     
    } 
} 
File Destination=new File(Dest, source.getName()); 
documentManager.copyFile(source, Destination); 

과 CopyFile 수는 다음과 같습니다 : 내 코드는

public static void copyFile(File sourceFile, File destFile) throws FileNotFoundException,IOException { 
    if(!destFile.exists()) { 
     destFile.createNewFile(); 
    } 

    FileChannel source = null; 
    FileChannel destination = null; 
    try { 
     source = new FileInputStream(sourceFile).getChannel(); 
     destination = new FileOutputStream(destFile).getChannel(); 
     destination.transferFrom(source, 0, source.size()); 
    } 
    finally { 
     if(source != null) { 
      source.close(); 
     } 
     if(destination != null) { 
      Runtime.getRuntime().exec("chmod 600 '"+destFile.getAbsolutePath()+"'"); 
      destination.close(); 
     } 
    } 
} 

문제가 무엇입니까?

감사합니다.

+0

스택 추적을 게시하십시오. 아마 너 자신을 분석 할거야. 어디에서 예외가 발생합니까? – AlexR

답변

2

디렉토리에 파일을 쓸 수 있도록 실행 비트가 설정되어 있어야합니다. 디렉토리에서 chmod + x를 시도하십시오. 모든 들어

mkdir tmp2323 
chmod a-x tmp2323 
touch tmp2323/test 
touch: cannot touch `tmp2323/test': Permission denied 
+0

대단히 감사합니다. 이제 다른 문제 : Jar 파일에서 응용 프로그램을 실행할 때'chmod'가 작동하지 않는 이유는 무엇입니까? ('ls -l'은 생성 된 모든 파일과 디렉토리에 대해 "drwxrwxr-x"를 제공합니다!) – RYN

+0

디렉토리는 디렉토리의 모든 활동을 수행하도록 설정된 실행 가능 비트가 필요합니다 – Petesh

1

:

dirs.setWritable(true, false); 

에만 소유자 :

dirs.setWritable(true, true); 

또는

,
dirs.setWritable(true); 
-1

집에서 파일을 만들려면 chmod 777 /home을 실행하십시오. 그렇지 않으면 /home을 다른 디렉토리로 변경하십시오. 그런 다음 간단한 코드로 파일을 만들 수 있습니다.