List .zip directories without extracting

java, zip

Solution

I suggest you have a look at `ZipFile.entries()`.

Here's some code:

try (ZipFile zipFile = new ZipFile("test.zip")) {
    Enumeration<? extends ZipEntry> zipEntries = zipFile.entries();
    while (zipEntries.hasMoreElements()) {
        String fileName = zipEntries.nextElement().getName();
        System.out.println(fileName);
    }
}

If you're using Java 8, you can avoid the use of the almost deprecated `Enumeration` class using `ZipFile::stream` as follows:

zipFile.stream()
       .map(ZipEntry::getName)
       .forEach(System.out::println);

If you need to know whether an entry is a directory or not, you could use `ZipEntry.isDirectory`. You can't get much more information than that without extracting the file (for obvious reasons).

If you want to avoid extracting all files, you can extract one file at a time using `ZipFile.getInputStream` for each `ZipEntry`. (Note that you don't need to store the unpacked data on disk, you can just read the input stream and discard the bytes as you go.

Problem

I am building a file explorer in Java and I am listing the files/folders in JTrees. What I am trying to do now is when I get to a zipped folder I want to list its contents, but without extracting it first. If anyone has an idea, please share.

Original source

Related problems