How can I read files from a zip file into memory using Java?

I found an example from the SUN website (http://java.sun.com/developer/technicalArticles/Programming/compression/), but it returns a BufferedOutputStream. But I would like to get the ZipEntry file as an InputStream, and then process the next file. Is it possible? My program does not have access to the hard drive, so it cannot even temporarily save files.

import java.io.*;
import java.util.zip.*;

public class UnZip {
   final int BUFFER = 2048;
   public static void main (String argv[]) {
      try {
         BufferedOutputStream dest = null;
         FileInputStream fis = new 
       FileInputStream(argv[0]);
         ZipInputStream zis = new 
       ZipInputStream(new BufferedInputStream(fis));
         ZipEntry entry;
         while((entry = zis.getNextEntry()) != null) {
            System.out.println("Extracting: " +entry);
            int count;
            byte data[] = new byte[BUFFER];
            // write the files to the disk
            FileOutputStream fos = new 
          FileOutputStream(entry.getName());
            dest = new 
              BufferedOutputStream(fos, BUFFER);
            while ((count = zis.read(data, 0, BUFFER)) 
              != -1) {
               dest.write(data, 0, count);
            }
            dest.flush();
            dest.close();
         }
         zis.close();
      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}
+5
source share
1 answer

Well, just change the part that writes the file to what you want to do with the data.

while((entry = zis.getNextEntry()) != null) {
    System.out.println("Extracting: " + entry);
    int count;
    byte data[] = new byte[BUFFER];
    string filename = entry.getName();
    System.out.println("Filename: " + filename);
    while ((count = zis.read(data, 0, BUFFER)) != -1) {
       // Do whatever you want with the data variable
       System.out.println(data);
    }
}
+13
source

All Articles