Java - 附加新ZipEntry时删除ZipEntries

时间:2016-05-11 11:03:33

标签: java zip zipfile file-copying

我正在尝试创建一个将java.io.File复制到java.util.zip.ZipFile中的方法。为此,我首先打开ZipFile的java.util.zip.ZipOutputStream,然后使用文件名创建一个新的java.util.zip.ZipEntry,将新的ZipEntry放入ZipOutputStream然后写入文件的内容到ZipOutputStream。之后,我刷新ZipOutputStream并关闭所有流。

由于某种原因,我无法解释此过程从ZipFile中删除所有其他ZipEntries,只留下复制的那个。以下是复制文件的代码(该文件由java.io.InputStream参数表示)

public static void main(final String[] args) throws ZipException, IOException {
    final Package p = FileHandler.class.getPackage();
    final InputStream classStream = FileHandler.stream(p, "FileHandler.class");

    FileHandler.compress(classStream, new ZipFile(new File("C:/Users/litts/Desktop/FileHandlerTest/TestZip.jar")),
            "FileHandler1.class");

}

这是我调用此方法的代码

{{1}}

所以我在这里基本上做的是将FileHandler的类文件复制到zip文件中。但是这样做的所有其他内容都被删除了。

2 个答案:

答案 0 :(得分:1)

您没有在Zip文件中阅读,只是在文件级别覆盖它。

答案 1 :(得分:0)

使用NIO.2 File API将文件复制到zip文件变得更加容易。

尝试(未经测试):

try (FileSystem zipFS =  FileSystems.newFileSystem(URI.create("jar:" + zipURI), Collections.<String, Object>emptyMap())) {  
    Path targetInZipPath = zipFS.getPath(targetInZipPathString);  

    Files.copy(srcPath, targetInZipPath);  
}