我有一个现有的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存档并复制所有旧数据)。
答案 0 :(得分:18)
我觉得你很幸运。
将java 7 java.nio.file.FileSystem
和Files.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()