ZipEntry.isDirectory () и перечисление <? расширяет ZipEntry> только видеть содержимое каталога, а не каталог

1

Я работаю над просмотром файла.zip, чтобы подтвердить, что все содержащиеся в нем файлы названы правильно, и в некоторых проблемах. Здесь иерархия файлов:

-.zip
  -dir
    -file1
    -file2
    -file3
  -file4
  -file5
  -file6

Код:

for (Enumeration<? extends ZipEntry> e = zf.entries(); e.hasMoreElements(); ) {
            ZipEntry entry = e.nextElement();
            System.out.println("ZipEntry name: " + entry.getName());
            ...
}

Обычный выход:

ZipEntry name: dir/file1
ZipEntry name: dir/file2
ZipEntry name: dir/file3
ZipEntry name: file4
ZipEntry name: file5
ZipEntry name: file6

Желаемый результат также будет содержать

ZipEntry name: dir/

Как ни странно, у меня есть один тестовый пример, где я получаю желаемый результат: при использовании.zip идентичной иерархии, которая была отправлена мне по электронной почте. Всякий раз, когда я использую.zip, которые я сжал на своей машине, я получаю "Обычный вывод". Мне бы очень хотелось иметь последовательное поведение, но я не могу понять, что происходит. Есть идеи?

Заранее спасибо!

Теги:
zip

1 ответ

3
Лучший ответ

В zip файле нет каталогов. Есть записи. И ZipEntry#isDirectory() проверяет, заканчивается ли имя записи с / чтобы определить, следует ли считать ее каталогом. Так что ваш zip файл содержит

dir/file1
dir/file2
dir/file3
file4
file5
file6

В этом странном случае zip, вероятно, фактически содержит

dir/   // the entry won't actually have any content though
dir/file1
dir/file2
dir/file3
file4
file5
file6

Это полезно для менеджеров файлов zip, чтобы определить, как следует извлекать записи.

  • 0
    Благодаря пакету, я должен быть в состоянии начать дела теперь, когда я знаю, каково правильное поведение!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню