Список.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();
    ...
}

Для обработки ZIP-файлов вы можете использовать класс ZipFile. У него есть метод entry (), который возвращает список записей, содержащихся в ZIP-файле. Эта информация содержится в заголовке ZIP и извлечение не требуется.

Другие вопросы по тегам