Список.zip каталогов без распаковки
Я строю файловый менеджер в Java, и я перечисляю файлы / папки в JTrees. Что я пытаюсь сделать сейчас, так это когда я попадаю в заархивированную папку, я хочу перечислить ее содержимое, но не распаковывая ее.
Если у кого есть идея, поделитесь пожалуйста.
3 ответа
Я предлагаю вам взглянуть на ZipFile.entries()
,
Вот некоторый код:
try (ZipFile zipFile = new ZipFile("test.zip")) {
Enumeration zipEntries = zipFile.entries();
while (zipEntries.hasMoreElements()) {
String fileName = ((ZipEntry) zipEntries.nextElement()).getName();
System.out.println(fileName);
}
}
Если вы используете Java 8, вы можете избежать использования почти устаревшего Enumeration
класс с использованием ZipFile::stream
следующее:
zipFile.stream()
.map(ZipEntry::getName)
.forEach(System.out::println);
Если вам нужно знать, является ли запись каталогом или нет, вы можете использовать ZipEntry.isDirectory
, Вы не можете получить гораздо больше информации, чем без извлечения файла (по понятным причинам).
Если вы хотите избежать извлечения всех файлов, вы можете извлечь один файл за раз, используя ZipFile.getInputStream
для каждого ZipEntry
, (Обратите внимание, что вам не нужно хранить распакованные данные на диске, вы можете просто прочитать входной поток и отбросить байты по мере продвижения.
Использование java.util.zip.ZipFile
класс и, в частности, его entries
метод.
У вас будет что-то вроде этого:
ZipFile zipFile = new ZipFile("testfile.zip");
Enumeration zipEntries = zipFile.entries();
String fname;
while (zipEntries.hasMoreElements()) {
fname = ((ZipEntry)zipEntries.nextElement()).getName();
...
}