Я работаю над просмотром файла.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 файле нет каталогов. Есть записи. И 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, чтобы определить, как следует извлекать записи.