Zip Folder Using Java

Here we will learn how to compress files and sub folders of a folder just to take less space.

Zip Folder Using Java

Here we will learn how to compress files and sub folders of a folder just to take less space.

 Zip Folder Using Java

Zipping a Folder

     

In this example we are going to create a zip folder and all files contained in this folder are zipped by using java. Here we will learn how to compress files and sub folders of a folder just to take less space.

To do so we create two objects of File class. In first object we are pass the name of  the folder which have to compress and in the second object we pass the name of zip folder.

The java.util.zip.DeflaterOutputStream class is immediate supper class of java.util.zip.ZipOutputStream class. java.util.zip. ZipOutputStream implements java.util.zip.ZipConstants interface. The class ZipOutStream implements an output stream filter to write files in the zip file format. This class can be used for both compressed and uncompressed files.

The java.io.FilterOutputStream class extends java.io.BufferedOutputStream class and implements a buffered output stream. We can write a byte steam into a file on the system. The java.io.FileInputStream class extends java.io.InputStream class. FileInputStream class is used to obtain input bytes from a file in a file system. The FileInputStream class is used to read stream of row bytes such as image data, for reading streams of characters by considering FileReader class.

We are creating an array of bytes with 1000 size and an array of string which will hold the name of all files of folders. The list() method is used to find list of files in a folder. By using BufferOutputStream we write the files and data into a folder. Here getPath() method is used to get the path of the "inFolder".

putNextEntry(new ZipEntry(filesToZip))This is the method of ZipOutputStream class which is used to entry files one by one to be zipped. This method is used to close any previous active zip entry and create a new zip entry by passing the instance of the ZipEntry class which holds the file name to be zipped. In this example we are going to zip "out" folder into "Out.zip". To execute this you need first to create "out"  folder and put the files to be zipped into this folder.

Here is the code of the program : 

 import java.io.*;
 import java.util.zip.*;
 public class ZipFolderExample
 {
 public static void main(String a[])
  {
  try
 {
 File inFolder=new File("out");
   File outFolder=new File("Out.zip");
 ZipOutputStream out = new ZipOutputStream(new 
BufferedOutputStream
(new FileOutputStream(outFolder)));
 BufferedInputStream in = null;
 byte[] data  = new byte[1000];
 String files[] = inFolder.list();
 for (int i=0; i<files.length; i++)
  {
  in = new BufferedInputStream(new FileInputStream
(
inFolder.getPath() "/" + files[i])1000);  
out.putNextEntry
(new ZipEntry(files[i]))
  int count;
  while((count = in.read(data,0,1000)) != -1)
  {
 out.write(data, 0, count);
  }
  out.closeEntry();
  }
  out.flush();
  out.close();
  }
  catch(Exception e)
 {
  e.printStackTrace();
  
 }
  } 

Download this example.