Метод записей JAVA ZipFile() не видит каталоги

Я работаю над цифровыми документами и цифровыми подписями, и я наткнулся на проблему.

Исходные данные: documentX.adoc - zip файл с файлами и папками внутри.

Мне нужно получить все содержимое входного файла - список каталогов и файлов.

Что я делаю:

ZipFile adocFile = new ZipFile(documentXFileName);
ArrayList <String> adocFiles = new ArrayList<String>();
Enumeration <? extends ZipEntry> entries;
entries = adocFile.entries();
for (entries = adocFile.entries(); entries.hasMoreElements();)
{
    adocFiles.add(entries.nextElement().getName());
}

Я пытался создать ArrayList ‹ ZipEntry > и добавить ZipEntries вместо имен - все равно ничего. Может быть, есть какой-то другой способ? Странно то, что ZipEntry имеет метод .isDirectory()...

Спасибо за помощь, Мартин


person Brutus    schedule 18.11.2010    source источник
comment
Вы проверили zip-файл, чтобы убедиться, что в нем действительно созданы каталоги?   -  person Powerlord    schedule 18.11.2010
comment
Ваш код выглядит нормально для меня. Возможно, откройте zip-файл (на основе заданного имени файла) в каком-то внешнем zip-инструменте и просто дважды проверьте, содержит ли файл записи? Если это работает, это может быть проблема с форматом, который реализация Java не поддерживает, но я действительно не знаю...   -  person Andrzej Doyle    schedule 18.11.2010
comment
Да, каталоги есть. Я могу просмотреть zip-файл (с помощью Far Manager), я вижу все каталоги и могу извлечь его, чтобы увидеть каталоги.   -  person Brutus    schedule 02.12.2010
comment
Кстати, Анджей Дойл, спасибо за исправление поста.   -  person Brutus    schedule 02.12.2010


Ответы (1)


Из документации :

Запись каталога определяется как запись, имя которой заканчивается на «/».

Нет необходимости хранить каталоги в ZIP-файле — это необязательные записи. Можно сохранить последовательность байтов с путем foo/bar.txt без записи с именем foo. Инструменты Zip могут создавать иллюзию того, что такие вещи существуют в архиве, даже если это не так.

person McDowell    schedule 18.11.2010