2017-01-13 123 views
0

我有一個包含一些文件的文件夾,現在我想將這些文件追加到已存在的zip文件中。如果我添加到zip的文件已經存在,那麼我將用新文件替換舊文件。對於zip操作,我使用zip4j jar。這是一張我的代碼在java中刪除zip文件

 for(File entry : temp.listFiles()) 
     { 
      String file = entry.getName(); 

      if(trgZip.getFileHeader(file) != null) 
      { 
       trgZip.removeFile(file); 
      } 
      ZipParameters param = new ZipParameters(); 
      trgZip.addFile(entry, param); 
     } 

但我得到這個例外 net.lingala.zip4j.exception.ZipException:不能刪除舊的zip文件 任何人都可以請建議我應該怎麼做來解決這個,或者我出錯的地方,或者這個removeFile方法是如何工作的,以便我可以嘗試找到錯誤點。

在此先感謝

+1

的[刪除從ZIP檔案文件,而無需在Java或Python的可能解壓(可能的複製http://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without -java -in-java-or-python) – Raedwald

回答

0

試試這個......!提供作爲第一參數的壓縮文件的路徑以及要從zip文件中刪除的文件名作爲第二個參數。

public static void deleteFile(String zipFilePath,String fileName) throws Exception{ 
     Map<String, String> zip_properties = new HashMap<>(); 
     zip_properties.put("create", "false"); 

     /* Specify the path to the ZIP File that you want to read as a File System */ 
     URI zip_disk = URI.create("jar:file:"+zipFilePath); 

     /* Create ZIP file System */ 
     try (FileSystem zipfs = FileSystems.newFileSystem(zip_disk, zip_properties)) { 
      /* Get the Path inside ZIP File to delete the ZIP Entry */ 
      Path pathInZipfile = zipfs.getPath(fileName); 
      System.out.println("About to delete an entry from ZIP File" + pathInZipfile.toUri()); 
      /* Execute Delete */ 
      Files.delete(pathInZipfile); 
      System.out.println("File successfully deleted"); 
     } 
    } 
+0

我嘗試過使用FileSystems,但是我無法使它工作。它不斷髮送錯誤,** ReadOnlyFileSystems **異常。可以用zip4j建議任何東西,或者如何使這個FilesSystem的東西有效。 – dopeE

+0

請分享完整的堆棧跟蹤和您嘗試過的代碼。 –

+0

使用** java.nio.file.FileSystem **不是FilesSystem或FileSystems –