我有一個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次這樣的大文件效率非常低 –