Ошибка java.util.zip.ZipException: неверный размер записи при копировании изображения (.png) из одного zip-файла в другой
Я пытаюсь изменить существующий файл.zip, а затем создаю измененную копию.
Я могу легко сделать это для всех файлов, за исключением файла.png в zip-файле, что приводит к ошибке
java.util.zip.ZipException: неверный сжатый размер записи (ожидалось 113177, но получено 113312 байт)
Следующий код - это то, что я пытаюсь запустить, чтобы просто скопировать изображение.png из dice.zip и добавить его в diceUp.zip.
public class Test {
public static void main(String[] args) throws IOException{
ZipFile zipFile = new ZipFile("dice.zip");
final ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("diceUp.zip"));
for(Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements(); ) {
ZipEntry entryIn = (ZipEntry) e.nextElement();
if(entryIn.getName().contains(".png")){
System.out.println(entryIn.getName());
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 < buf.length) ? len : buf.length);
}
}
zos.closeEntry();
}
zos.close();
}
1 ответ
Решение
Просто создайте новый объект ZipEntry с именем объекта entryIn и поместите этот новый объект в zos.putNextEntry.
Посмотри на это питание!
И это мой код:
public static void main(String[] args) throws IOException {
ZipFile zipFile = new ZipFile("/home/*********/resources/dice.zip");
// ZipFile zipFile = new ZipFile();
final ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("diceUp.zip"));
for (Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements(); ) {
ZipEntry entryIn = e.nextElement();
if (entryIn.getName().contains(".png")) {
System.out.println(entryIn.getName());
ZipEntry zipEntry = new ZipEntry(entryIn.getName());
zos.putNextEntry(zipEntry);
InputStream is = zipFile.getInputStream(entryIn);
byte[] buf = new byte[1024];
int len;
while ((len = (is.read(buf))) > 0) {
// zos.write(buf, 0, (len < buf.length) ? len : buf.length);
zos.write(buf);
}
}
zos.closeEntry();
}
zos.close();
}