Java.util.zip替换单个zip文件

时间:2012-12-09 12:20:02

标签: java zipoutputstream

问题

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

我知道:

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

然而,这并不是我想要的,因为它创建了一个新的Zip文件 - 因此我还必须添加main.zip中的所有现有条目。

问题:

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

1 个答案:

答案 0 :(得分:18)

我觉得你很幸运。

将java 7 java.nio.file.FileSystemFiles.copy()一起使用,我设法在一瞬间将文本文件插入到一个大型zip文件中。

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 Provider的zip。然后你可以复制你想要的任何东西。这些更改似乎发生在fs.close()

Read more @ oracle