我有一个zip文件,我想用另一个文件替换它里面的一个文件。因此,不需要删除zip条目,只需将zip条目的文件替换为另一个条目即可。替换一个Zip文件而不解压缩在Java
这是我试过的。
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
在位置d驱动器中的文件,我能够在文件中复制到通过替换我想要替换的文件来创建不同的zip文件。但这真的不需要(创建一个不同的文件)。 那么我应该怎么做才能用我的自定义文件替换文件。
我已经在Stackoverflow中搜索过不同的帖子,但无法找到我需要的东西。我读过这个zip条目不能被删除,但是替换它呢?请帮忙
是的我的文件被替换有不同的字节大小。但是,差异将在那里。 那我该如何取代它?你的意思是说我们无法替换文件(因为文件的大小总是不一样) –
准确地说:将文件中其余数据复制到“上”以便为更大数据腾出空间的代码是比简单更复杂:1)做你以上显示的; 2)删除旧文件; 3)重命名新文件。 –
我有5个配置文件,并且zip文件大小为170 MB,所以这意味着创建一个zip文件五次,5 X 170 MB文件,因此创建,替换和重命名5次这样的大文件效率非常低 –