我的要求是替换zip文件中的少量文件。
zip文件又包含多个zip文件和文件夹。它最多可达4个或更多级别的zip文件。
我在不同的源目录中有一组文件。我想复制这些文件并在zip文件中替换,方法是将源目录中的文件名与zip文件中的文件名相匹配。
请有人帮忙。
谢谢, Deleep
答案 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。从未尝试过,但我认为这可能有所帮助。