Here is an example how to compress files in ZIP format using Java.
Example
The purpose of this tutorial is to take a file or a folder and compress into an archive all the files and sub-folders keeping the structure. For these classes from the java.util.zip package will be used.
There are two options for compression:
- STORED: uncompressed entries.
- DEFLATED: compressed entries.
package com.admfactory.io.archive;
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 CreateZIPArchive {
public static void main(String[] args) {
String output = "D:\\admfactory.com\\archive.zip";
String source = "D:\\admfactory.com\\dir1\\";
System.out.println("Zip Archive Example");
System.out.println();
System.out.println("Output to Zip : " + output);
System.out.println();
List<String> fileList = getAllFileList(new File(source));
zip(output, fileList);
}
/**
* Zip the list received as parameter
*
* @param zipFile
* output ZIP file location
*/
public static void zip(String zipFile, List<String> fileList) {
byte[] buffer = new byte[1024];
try {
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
zos.setMethod(ZipOutputStream.DEFLATED);
for (String file : fileList) {
System.out.println("File added: " + file);
ZipEntry ze = new ZipEntry(file);
zos.putNextEntry(ze);
FileInputStream in = new FileInputStream(file);
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
in.close();
}
zos.closeEntry();
zos.close();
System.out.println();
System.out.println("Done!");
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* Traverse a directory and get all files, and add the file into fileList
*
* @param file
* file or directory
* @return the list with all files to be added
*/
public static ArrayList<String> getAllFileList(File file) {
ArrayList<String> result = new ArrayList<String>();
/** add the file only */
if (file.isFile()) {
result.add(file.getAbsolutePath());
/** add all files from the folder */
} else if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
result.addAll(getAllFileList(f));
}
}
return result;
}
}
Output
Zip Archive Example
Output to Zip : D:\admfactory.com\archive.zip
File added: D:\admfactory.com\dir1\dir3\dir4\f6.txt
File added: D:\admfactory.com\dir1\dir3\dir4\f7.txt
File added: D:\admfactory.com\dir1\dir3\f4.txt
File added: D:\admfactory.com\dir1\dir3\f5.txt
File added: D:\admfactory.com\dir1\f1.txt
File added: D:\admfactory.com\dir1\f2.txt
File added: D:\admfactory.com\dir1\f3.txt
Done!
Also, you can check the archive file created.