替换多级zip文件夹中的文件

时间:2016-05-11 14:16:36

标签: java replace zip hierarchical multi-level

我的要求是替换zip文件中的少量文件。

zip文件又包含多个zip文件和文件夹。它最多可达4个或更多级别的zip文件。

我在不同的源目录中有一组文件。我想复制这些文件并在zip文件中替换,方法是将源目录中的文件名与zip文件中的文件名相匹配。

请有人帮忙。

谢谢, Deleep

1 个答案:

答案 0 :(得分:0)

一种方法是使用临时文件存储ZIP并将其作为FileSystems打开,因此您不需要提取所有文件并重新压缩所有文件

    FileSystem firstZip = FileSystems.newFileSystem(URI.create("jar:file:/root/firstZip.zip"),
            new HashMap<>(), null);

    //Get a zip inside the first one
    Path path = firstZip.getPath("FOLDER/ZIP_NAME.zip");
    //Get the second zip input stream  and store the zip in a temp file
    InputStream in  = firstZip.provider().newInputStream(path);
    Path secondPath = Paths.get("/root/temp/tempFile.tmp");
    Files.copy(in, secondPath);
    //open the second zip
    FileSystem secondZip = FileSystems.newFileSystem(new URI("jar:" + secondPath.toUri().toString()),
            new HashMap<>(), null);
    //iterate files in the second zip
    DirectoryStream<Path> ds = Files.newDirectoryStream(secondPath);
    for(Path p: ds){
        //something
    }
    //delete or update files inside the second zip
    //Files.delete(seconZip.getPath("aFile.txt"));
    //Files.copy(anInputStream, secondZip.getPath("destFoldet/aFile.txt"));

    //clse the seconzip
    secondZip.close();
    //update the second zip inside first one
    Files.copy(secondPath, firstZip.provider().newOutputStream(path));
    //delete temp file
    Files.delete(secondPath);
    //close first zip
    firstZip.close();

其他想法是jboss-vfs。从未尝试过,但我认为这可能有所帮助。