How to compress files in ZIP format
Written on January 21, 2010 at 8:18 am by
mkyong
Java comes with “java.util.zip” library to implement the data compression in ZIp format. The overall concept is quite straightforward.
- Read file with “FileInputStream”
- Add the file name to “ZipEntry” and output it to “ZipOutputStream“
Simple ZIP example
Read a file “C:\\spy.log” and compress it into a zip file – “C:\\MyFile.zip“.
package com.mkyong.zip; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class App { public static void main( String[] args ) { byte[] buffer = new byte[1024]; try{ FileOutputStream fos = new FileOutputStream("C:\\MyFile.zip"); ZipOutputStream zos = new ZipOutputStream(fos); ZipEntry ze= new ZipEntry("spy.log"); zos.putNextEntry(ze); FileInputStream in = new FileInputStream("C:\\spy.log"); int len; while ((len = in.read(buffer)) > 0) { zos.write(buffer, 0, len); } in.close(); zos.closeEntry(); //remember close it zos.close(); System.out.println("Done"); }catch(IOException ex){ ex.printStackTrace(); } } }
Advance ZIP example – Recursively
Read all files from folder “C:\\testzip” and compress it into a zip file – “C:\\MyFile.zip“. It will recursively zip a directory as well.
package com.mkyong.zip; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class AppZip { List<String> fileList; private static final String OUTPUT_ZIP_FILE = "C:\\MyFile.zip"; private static final String SOURCE_FOLDER = "C:\\testzip"; AppZip(){ fileList = new ArrayList<String>(); } public static void main( String[] args ) { AppZip appZip = new AppZip(); appZip.generateFileList(new File(SOURCE_FOLDER)); appZip.zipIt(OUTPUT_ZIP_FILE); } /** * Zip it * @param zipFile output ZIP file location */ public void zipIt(String zipFile){ byte[] buffer = new byte[1024]; try{ FileOutputStream fos = new FileOutputStream(zipFile); ZipOutputStream zos = new ZipOutputStream(fos); System.out.println("Output to Zip : " + zipFile); for(String file : this.fileList){ System.out.println("File Added : " + file); ZipEntry ze= new ZipEntry(file); zos.putNextEntry(ze); FileInputStream in = new FileInputStream(SOURCE_FOLDER + File.separator + file); int len; while ((len = in.read(buffer)) > 0) { zos.write(buffer, 0, len); } in.close(); } zos.closeEntry(); //remember close it zos.close(); System.out.println("Done"); }catch(IOException ex){ ex.printStackTrace(); } } /** * Traverse a directory and get all files, * and add the file into fileList * @param node file or directory */ public void generateFileList(File node){ //add file only if(node.isFile()){ fileList.add(generateZipEntry(node.getAbsoluteFile().toString())); } if(node.isDirectory()){ String[] subNote = node.list(); for(String filename : subNote){ generateFileList(new File(node, filename)); } } } /** * Format the file path for zip * @param file file path * @return Formatted file path */ private String generateZipEntry(String file){ return file.substring(SOURCE_FOLDER.length()+1, file.length()); } }
Output
Output to Zip : C:\MyFile.zip File Added : pdf\Java-Interview.pdf File Added : spy\log\spy.log File Added : utf-encoded.txt File Added : utf.txt Done
Follow Up
How to decompress it from a Zip file
Reference
This article was posted in Java category.
Oracle Magazine - Free Magazine
Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for Java's developers and DBAs, and more.
Securing & Optimizing Linux: The Hacking Solution - Free Guide
A comprehensive collection of Linux security products and explanations in the most simple and structured manner on how to safely and easily configure and run many popular Linux-based applications and services.
The Windows 7 Guide: From Newbies to Pros - Free Guide
In this 46 page guide you will be introduced to Windows 7 and what it has to offer. This guide will go over the software compatible issues, you will learn about the new taskbar, how to use and customize Windows Aero, what Windows 7 Libraries are all about, what software is included in Windows 7, and how easy networking is with Windows 7 along with other topics.
All Java Tutorials
- Java Core Technology - Java RegEx, Java XML, Java I/O, Java Misc
- J2EE Frameworks - Hibernate, Spring 2.5, Spring MVC, Struts 1.x, Struts 2.x
- Build Tools - Maven, Archiva
- Unit Test - jUnit, TestNG
- Client Scripts - jQuery
[...] Compress files in ZIP format [...]
[...] Written on January 22, 2010 at 12:45 pm by mkyong In previous article, you learn about how to compress files to a zip file format. In this article you will learn how to unzip [...]