文件:ZipDirectoryExample.java -
package com.yiibai.tutorial.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
* @author yiibai
public class ZipDirectoryExample {
public static void main(String[] args) {
File zipFile = new File("MyZip.zip");
File directory = new File("D:/Work/java");
FileOutputStream fileOutputStream = null;
ZipOutputStream zipOutputStream = null;
try {
fileOutputStream = new FileOutputStream(zipFile);
zipOutputStream = new ZipOutputStream(fileOutputStream);
// Create zip file
createZipFile(zipOutputStream, directory, directory.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (zipOutputStream != null) {
zipOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
* @param zipOutputStream
* @param directory
* @throws IOException
private static void createZipFile(ZipOutputStream zipOutputStream, File directory, String zipEntryPath) throws IOException {
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
createZipFile(zipOutputStream, file, zipEntryPath);
} else {
FileInputStream fileInputStream = new FileInputStream(file);
// Create zipEntry
String filePath = file.getAbsolutePath();
ZipEntry entry = new ZipEntry(filePath.replace(zipEntryPath + File.separator, ""));
// Set position of stream to the start of entry data
zipOutputStream.putNextEntry(entry);
// Write data to zip output stream
byte data[] = new byte[1024];
int i;
while ((i = fileInputStream.read(data)) != -1) {
zipOutputStream.write(data, 0, i);
// Closes the current ZIP entry
zipOutputStream.closeEntry();
// Close file stream
fileInputStream.close();