8

问题

我有一个现有的 zip 文件“main.zip”。我想替换其中的一个文件,“比如 main.zip/foo”。

我知道:

http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipOutputStream.html

但是,这并不能满足我的要求,因为它会创建一个新的 Zip 文件——因此我还必须在 main.zip 中添加所有现有条目。

问题:

有没有办法在 Java 的 Zip 存档中“替换”单个文件?(无需重新创建新的 zip 存档并复制所有旧数据)。

4

1 回答 1

23

我认为你很幸运。

将 java 7与我java.nio.file.FileSystem一起使用,Files.copy()我设法在瞬间将一个文本文件插入到一个大的 zipfile 中。

public static void main(String[] argv) {
    Path myFilePath = Paths.get("c:/dump2/mytextfile.txt");

    Path zipFilePath = Paths.get("c:/dump2/myarchive.zip");
    try( FileSystem fs = FileSystems.newFileSystem(zipFilePath, null) ){
        Path fileInsideZipPath = fs.getPath("/mytextfile.txt");
        Files.copy(myFilePath, fileInsideZipPath);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

它使用 ZipFileSystem 提供程序“挂载”zip。然后,您可以将任何您想要的内容复制到其中。这些变化似乎发生在fs.close()

阅读更多@甲骨文

于 2012-12-09T13:41:08.303 回答