Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Overview

Zip files are widely used for compressing and archiving multiple files into a single file. Programmatically extracting and processing individual entries from a zip file can be valuable in various scenarios.

In this short tutorial, we’ll explore how to read zip file entries with Java.

2. Solution

We can easily read the entries of a zip file using the ZipFile and ZipEntry classes from the java.util.zip package:

String zipFilePath = "path/to/our/zip/file.zip";

try (ZipFile zipFile = new ZipFile(zipFilePath)) {
    Enumeration<? extends ZipEntry> entries = zipFile.entries();
    while (entries.hasMoreElements()) {
        ZipEntry entry = entries.nextElement();
        // Check if entry is a directory
        if (!entry.isDirectory()) {
            try (InputStream inputStream = zipFile.getInputStream(entry)) {
                // Read and process the entry contents using the inputStream
            }
        }
    }
}

Let’s go into the details of the steps:

  • First, we can create a ZipFile object that represents the zip file. This object will provide access to the entries within the file.
  • Once we have the ZipFile object, we can iterate over its entries using the entries() method. Each entry represents a file or directory.
  • For each entry, we can access various properties such as the name, size, modification time, and more. Let’s use the isDirectory() method to check if it’s a directory.
  • To read the contents of a specific entry, we can use the InputStream returned by the getInputStream() method. This allows us to access the bytes of the entry’s data.
  • Finally, let’s use try-with-resources so we don’t have to worry about closing ZipFile and InputStream manually.

3. Example

Let’s test our solution with a zip file that has the following structure:

fileA.txt
folder1/
folder1/fileB.txt

Let’s change our above code to read the contents of the text files in the zip file:

try (InputStream inputStream = zipFile.getInputStream(entry);
     Scanner scanner = new Scanner(inputStream);) {

    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        System.out.println(line);
    }
}

And the output will look like this:

this is the content in fileA
this is the content in fileB

4. Conclusion

In this tutorial, we have learned how to read zip file entries with Java.

The example code from this article can be found over on GitHub.

Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – REST with Spring (eBook) (everywhere)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.