2013-03-19 7 views
0

안녕하세요 TrueZIP를 사용하여 파일을 압축 해제하려고하고 그렇게하는 동안 예외FsReadOnlyArchiveFilesystemException

de.schlichtherle.truezip.fs.archive.FsReadOnlyArchiveFileSystemException: This is a read-only archive file system!

그것은 일부 파일에 대한 작품과 다른 사람에 대한 예외를 throw를 얻을.

그래서 권한을 변경하고 쓰기 가능하게 만들려고했으나 작동하지 않습니다.

public void unzipFiles(TFile[] files){ 
    try{ 
     for(int i=0; i < files.length; i++){ 
      System.out.println("Processing please wait ..."); 
      if(files[i].isArchive()){ 
       if(files[i].getName().endsWith(".zip")){ 
        System.out.println(files[i].getName()); 
        System.out.println("Is writable "+files[i].canWrite()); 
        //change the file permission to be writable 
        if(files[i].canWrite() == false){ 
         files[i].setWritable(true); 
         files[i].setExecutable(true); 
         System.out.println("After setting it writeable "+files[i].canWrite()); 
        } 
        String filename = files[i].getName(); 
        String pathToExtract = files[i].getParent() + "\\" + filename.substring(0, filename.lastIndexOf(".")); 
        File createdirectory = new File(pathToExtract); 

        TFile directoryToExtract = new TFile(pathToExtract); 
        TFile.cp_rp(files[i], directoryToExtract, TArchiveDetector.NULL, TArchiveDetector.NULL); 
        System.out.println("Unzipping files .."); 
        TFile.rm_r(files[i]); 
        System.out.println("Deleting Zip file.."); 
        numOfZips = numOfZips + 1; 
        unzipFiles(directoryToExtract.listFiles()); 
       } 
      }else{ 
       if(files[i].isDirectory()){ 
        unzipFiles(files[i].listFiles()); 
       } 
      } 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

수있는 사람의 도움을하시기 바랍니다 : 여기에

내 코드?

감사합니다.

답변

1

TrueZIP는 사용 권한을 지원하지 않습니다. 그래서 setWritablesetExecutable은 아카이브 파일에서 의미를 갖기 위해 무시되지 않는 유일한 방법입니다. 부울 반환 값을 확인한 경우 파일 객체가 아카이브 파일 내의 항목을 처리하는 경우 false을 반환한다는 것을 알았을 것입니다.

이외에도 보관 파일을 수정할 위치가 표시되지 않으므로 FsReadOnlyArchiveFileSystemException을받는 방법에 대해서는 설명 할 수 없습니다. 읽기 전용 보관 파일 시스템을 수정하려고하면 (예 : 보관 파일이 읽기 전용 인 경우) 일반적으로 발생합니다.

스택 추적을 제공하면 왜 이런 일이 발생했는지 분명해질 수 있습니다.