java - Fs 只读存档 FilesystemException

标签 java file truezip

您好,我正在尝试使用 TrueZIP 解压缩文件,但在执行此操作时出现异常

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

它对某些文件有效,而对其他文件则抛出异常。

所以我尝试更改权限并使其可写,但这也不起作用。

这是我的代码:

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();
    }

有人可以帮忙吗?

谢谢。

最佳答案

请注意,TrueZIP 不支持权限。因此,setWritablesetExecutable 是唯一不会被重写以在存档文件中有意义的方法。如果您检查过它们的 boolean 返回值,您就会发现,如果文件对象正在寻址存档文件中的条目,它们就会返回 false

除此之外,我不知道您将在哪里修改存档文件,因此我无法评论您如何获得 FsReadOnlyArchiveFileSystemException。如果您尝试修改只读存档文件系统,即存档文件是只读的,通常会抛出此错误。

如果您提供堆栈跟踪,那么发生这种情况的原因可能会变得显而易见。

关于java - Fs 只读存档 FilesystemException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15500849/

相关文章:

java - 处理目录中的传入文件

java - TrueZip 递归解压缩?

Android检查文件是否存在()不起作用

java - 如何使用TrueZip压缩文件?

java - 尝试从 ear 文件编辑 jar 中的属性文件。最好的方法是什么?

java - hadoop中的NoCLassDefFounderror

java - 前几个微软翻译器 API 请求成功,然后调用失败并抛出 NoArgument 异常且 appid 无效

java - bean实例化失败;嵌套异常是 java.lang.NoClassDefFoundError : org/springframework/core/io/Resource - using spring-core. 4_2_5

java - MongoDB Solr 搜索以在单个搜索请求中获取文档关系

file - 在类路径 grails war/tomcat 上找不到文件