У меня есть 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
}
У меня есть файл зип запись с именем:
WEB-INF/classes/config/app-dev.yml
и у меня есть файл на месте г диск на месте
D:/app-dev.yml
Я могу скопировать файл к другой zip-файл, заменив файл, который я хочу заменить. Но это действительно не нужно (для создания другого файла). Итак, что мне нужно сделать, чтобы просто заменить файл на свой файл.
Я искал разные сообщения в Stackoverflow, но не смог найти то, что мне нужно. Я читал, что запись zip не может быть удалена, но как ее заменить? Пожалуйста, помогите
Да, мой файл, подлежащий замене, имеет разные размеры байтов. Но да разница будет там. Так как я могу его заменить? Вы хотите сказать, что мы не можем заменить файл (потому что размер всегда будет другим) –
Точно: код для копирования остальных данных в файле «вверх», чтобы освободить место для ваших больших данных сложнее, чем просто: 1) Сделайте то, что вы показали выше; 2) Удалить старый файл; 3) Переименуйте новый файл. –
У меня есть 5 файлов конфигурации, а размер zip-файла - 170 МБ, поэтому это будет означать, создавая zip-файл пять раз, 5 X 170 МБ файлов, поэтому создание, замена и переименование 5 раз такой большой файл очень неэффективен –