Запись в центральном каталоге не найдена (ZipException) - PullRequest
2 голосов
/ 10 декабря 2010

Я пытаюсь загрузить ZIP-файл на SD-карту.Я загружаю его правильно, но когда я открываю загруженный файл (с ZipFile), я получаю это исключение ZipException («Запись в центральном каталоге не найдена»).

Интернет-файл в порядке, SD-копия-файл в порядке (ПК открывался и правильно отображал файлы), но по какой-то причине не работает в Android.

Код для скачивания:

<code>BufferedInputStream stream = null;
try {
  stream = new BufferedInputStream(is, 8192);
}
....</p>

<p>try {
  ByteArrayBuffer baf = new ByteArrayBuffer(50);
  int current = 0;
  while ((current = stream.read()) != -1 ) 
    baf.append((byte) current);   </p>

<p>BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(path));
  fos.write(baf.toByteArray());
  fos.close();
}
...

Я предположил, чтопроблема в заголовках файлов ZIP, которые не были правильно написаны, но я не знаю, по какой причине.Исходный код класса ZipEntry показывает мне это:

<code>long sig = (hdrBuf[0] & 0xff) | ((hdrBuf[1] & 0xff) < <  8) |
           ((hdrBuf[2] & 0xff) < <  16) | ((hdrBuf[3] < <  24) & 0xffffffffL);
if (sig != CENSIG) {
     throw new ZipException("Central Directory Entry not found");
}

Спасибо,

1 Ответ

3 голосов
/ 15 декабря 2010

Автоматический ответ: проблема заключалась в том, что HTTP-запрос использует Accept-Encoding: gzip .

Сервер вернул уже сжатый файл и загрузил его, распаковал его, удалив частьheader.

К сожалению, 7zip открылся правильно (возможно, не проверять заголовки), но Android не открыл файл (возможно, проверьте заголовки).

Короче говоря : будьте осторожныи проверьте правильность кодировки файлов с некоторыми файлами.

...