Skip to Content

Create Zip File From Directory Recursively Using ZipOutputStream Example

  1. /*
  2.         Create Zip File From Directory recursively using ZipOutputStream Example
  3.         This Java example shows how create zip file from directory recursively
  4.         using Java ZipOutputStream class. This program also shows how to add
  5.         directory and sub-directories to zip file.
  6. */
  7.  
  8. import java.io.File;
  9. import java.io.FileInputStream;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;
  12. import java.util.zip.ZipEntry;
  13. import java.util.zip.ZipException;
  14. import java.util.zip.ZipOutputStream;
  15.  
  16.  
  17. public class CreateZipDirectoryRecursively {
  18.        
  19.         public static void main(String args[])
  20.         {
  21.                 String sourceDir = "C:/examples";
  22.                 String zipFile = "C:/FileIO/zipdemo.zip";
  23.                
  24.                 try
  25.                 {
  26.                         //create object of FileOutputStream
  27.                         FileOutputStream fout = new FileOutputStream(zipFile);
  28.                                  
  29.                         //create object of ZipOutputStream from FileOutputStream
  30.                         ZipOutputStream zout = new ZipOutputStream(fout);
  31.                        
  32.                         //create File object from source directory
  33.                         File fileSource = new File(sourceDir);
  34.                        
  35.                         addDirectory(zout, fileSource);
  36.                        
  37.                         //close the ZipOutputStream
  38.                         zout.close();
  39.                        
  40.                         System.out.println("Zip file has been created!");
  41.                        
  42.                 }
  43.                 catch(IOException ioe)
  44.                 {
  45.                         System.out.println("IOException :" + ioe);     
  46.                 }
  47.  
  48.         }
  49.  
  50.         private static void addDirectory(ZipOutputStream zout, File fileSource) {
  51.                
  52.                 //get sub-folder/files list
  53.                 File[] files = fileSource.listFiles();
  54.                
  55.                 System.out.println("Adding directory " + fileSource.getName());
  56.                
  57.                 for(int i=0; i < files.length; i++)
  58.                 {
  59.                         //if the file is directory, call the function recursively
  60.                         if(files[i].isDirectory())
  61.                         {
  62.                                 addDirectory(zout, files[i]);
  63.                                 continue;
  64.                         }
  65.                        
  66.                         /*
  67.                          * we are here means, its file and not directory, so
  68.                          * add it to the zip file
  69.                          */
  70.                        
  71.                         try
  72.                         {
  73.                                 System.out.println("Adding file " + files[i].getName());
  74.                                
  75.                                 //create byte buffer
  76.                                 byte[] buffer = new byte[1024];
  77.                                
  78.                                 //create object of FileInputStream
  79.                                 FileInputStream fin = new FileInputStream(files[i]);
  80.                                
  81.                                 zout.putNextEntry(new ZipEntry(files[i].getName()));
  82.                          
  83.                                 /*
  84.                                  * After creating entry in the zip file, actually
  85.                                  * write the file.
  86.                                  */
  87.                                 int length;
  88.                          
  89.                                 while((length = fin.read(buffer)) > 0)
  90.                                 {
  91.                                    zout.write(buffer, 0, length);
  92.                                 }
  93.                          
  94.                                 /*
  95.                                  * After writing the file to ZipOutputStream, use
  96.                                  *
  97.                                  * void closeEntry() method of ZipOutputStream class to
  98.                                  * close the current entry and position the stream to
  99.                                  * write the next entry.
  100.                                  */
  101.                          
  102.                                  zout.closeEntry();
  103.                          
  104.                                  //close the InputStream
  105.                                  fin.close();
  106.                        
  107.                         }
  108.                         catch(IOException ioe)
  109.                         {
  110.                                 System.out.println("IOException :" + ioe);                             
  111.                         }
  112.                 }
  113.                
  114.         }
  115.  
  116. }
  117.  
  118. /*
  119. Output of this program would be
  120. Adding directory examples
  121. Adding directory FileIO
  122. Adding directory WebFiles
  123. Adding directory css
  124. Adding file datagrid.css
  125. Adding file graph.css
  126. Adding directory jsps
  127. Adding file Main.jtpl
  128. Adding file Masthead.jspf
  129. Adding file Welcome.jsp
  130. Adding file WebFiles.zip
  131. Adding file zipdemo.zip
  132. Adding file nonav.log
  133. Adding file ospreg.exe
  134. Adding file servers.ini
  135. Adding file setupisam.log
  136. Adding file sourceFile1.doc
  137. Adding file sourceFile2.doc
  138. Zip file has been created!
  139. */