2014-01-31 9 views
-1

Я пытаюсь добавить ZipEntry в ZipOutputStream, но у меня возникают проблемы при попытке записать байты.java.util.zip.ZipException при добавлении ZipEntry к ZipOutputStream без ZipInputStream

Я получил ZipEntry от HashMap, который сопоставляет имена файлов с их ZipEntries. Я выбрал этот метод, потому что я имею дело с большим ZipInputStream, и я хочу иметь доступ к его содержимому проще, чем перебирать через InputStream и искать файл и получать его ZipEntry.

Это вызывает проблему, когда я пытаюсь записать байты после добавления записи. Все решения, которые я нашел до сих пор, нуждались в ZipInputStream.

Вот код:

ZipEntry ze = entryHash.get(pathToString(path)); 
zos.putNextEntry(ze); 
zos.write(new byte[(int)ze.getSize()]); // Problem Here 
zos.closeEntry(); 

Ошибка я получаю:

java.util.zip.ZipException: invalid entry compressed size (expected 389 but got 12 bytes) 
    at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:248) 

Как я могу исправить это исключение?

+3

Тогда в чем проблема? –

+0

вам нужно написать файл в этот момент ... – njzk2

+0

java.util.zip.ZipException: недопустимый размер записи сжатый (ожидается 389, но получил 12 байтов) - это моя ошибка. Что значит писать файл? Вы хотите закрыть ZipOutputStream? Я хочу добавить еще, прежде чем я это сделаю. Спасибо за очень быстрые ответы! – vohab

ответ

1

Чтобы добавить в ZipOutputStream, необходимо создать ZipEntry. Но ваш код не имеет никакого смысла. Вы не копируете старый ZipEntry на выходе с помощью этой техники, вы просто пишете массив нулевых байтов того же размера. Вам нужно прочитать старый ZipEntry и записать на новый вывод. Ваша техника карты ZipEntries тоже не сработает. Zip-файл должен обрабатываться последовательно.

+0

Хорошо, что имеет смысл. У меня было ощущение, что мне не хватает большой концепции. – vohab

 Смежные вопросы

  • Нет связанных вопросов^_^