我有一个zip文件,我想用其他文件替换其中的一个文件。因此,不需要删除zip条目只需将zip条目的文件替换为另一个。
这是我尝试过的。
public void replaceConfigurationFile(ZipFile zipFile, ZipOutputStream zos, String pathToNewFile, String configFileToReplaced)
throws IOException {
String zipEntryName;
for(Enumeration<?> e = zipFile.entries(); e.hasMoreElements(); ) {
ZipEntry entryIn = (ZipEntry) e.nextElement();
zipEntryName = entryIn.getName();
if(zipEntryName.endsWith(configFileToReplaced)) {
FileInputStream fis = new FileInputStream(pathToNewFile);
ZipEntry zipEntry = new ZipEntry(zipEntryName);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
fis.close();
} else {
zos.putNextEntry(entryIn);
InputStream is = zipFile.getInputStream(entryIn);
byte [] buf = new byte[1024];
int len;
while((len = (is.read(buf))) > 0) {
zos.write(buf, 0, len);
}
zos.closeEntry();
}
} // enf of for
}
我有一个名为:
的文件zip条目WEB-INF/classes/config/app-dev.yml
我在位置<驱动器位置
处有一个文件 D:/app-dev.yml
我可以通过替换我想要替换的文件将文件复制到另一个zip文件中。但实际上并不需要(创建不同的文件)。 那么我该怎么做才能用我的自定义文件替换文件。
我在Stackoverflow中搜索了不同的帖子,但无法找到我需要的内容。我读到zip条目无法删除,但更换它呢?请帮忙
答案 0 :(得分:2)
您的问题是新文件可能比旧文件大 - 或者更小!您需要完全按照您的方式进行更改。新文件ZIP的与完全相同的概率几乎为零。
答案 1 :(得分:2)
标准Java ZIP文件库不允许您更新现有的ZIP文件。您需要使用第三方库。谷歌搜索应该找到许多替代品。
但你需要注意以下几点:
如果您的应用程序...或系统...在更新ZIP文件时崩溃,则该文件可能已损坏。
更新ZIP文件后,该文件的替换版本将附加到ZIP。旧版本仍将在ZIP中...但不在ZIP文件索引中。因此,更新ZIP文件(不重写它)会浪费磁盘空间。