将文件列表压缩为目标zip文件
//package com.nowjava;/* from nowjava - 时 代 Java*/ import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; /** 来自 时 代 Java - nowjava.com**/ import java.util.zip.ZipOutputStream; public class Main { /** * Size of the buffer to read/write data */ private static final int BUFFER_SIZE = 4096; /** * Compresses a list of files to a destination zip file * * @param listFiles * A collection of files and directories * @param destZipFilePath * The path of the destination zip file * @throws FileNotFoundException * @throws IOException */ public static void zip(List<File> listFiles, String destZipFilePath) throws FileNotFoundException, IOException { ZipOutputStream zos = null; try { zos = new ZipOutputStream(new FileOutputStream(destZipFilePath)); for (File file : listFiles) { if (file.isDirectory()) { zipDirectory(file, file.getName(), zos); } else { zipFile(file, zos); } } } finally { zos.flush(); zos.close(); } } /** * Compresses files represented in an array of paths * * @param files * a String array containing file paths * @param destZipFilePath * The path of the destination zip file * @throws FileNotFoundException * @throws IOException */ public static void zip(String[] files, String destZipFilePath) throws FileNotFoundException, IOException { List<File> listFiles = new ArrayList<File>(); for (int i = 0; i < files.length; i++) { listFiles.add(new File(files[i])); } zip(listFiles, destZipFilePath); } /** * Adds a directory to the current zip output stream * * @param folder * the directory to be added * @param parentFolder * the path of parent directory * @param zos * the current zip output stream * @throws FileNotFoundException * @throws IOException */ private static void zipDirectory(File folder, String parentFolder, ZipOutputStream zos) throws FileNotFoundException, IOException { for (File file : folder.listFiles()) { if (file.isDirectory()) { zipDirectory(file, parentFolder + "/" + file.getName(), zos); continue; } zos.putNextEntry(new ZipEntry(parentFolder + "/" + file.getName())); BufferedInputStream bis = null; try { bis = new BufferedInputStream(new FileInputStream(file)); long bytesRead = 0; byte[] bytesIn = new byte[BUFFER_SIZE]; int read = 0; while ((read = bis.read(bytesIn)) != -1) { zos.write(bytesIn, 0, read); bytesRead += read; } zos.closeEntry(); } finally { bis.close(); } } } /** * Adds a file to the current zip output stream * * @param file * the file to be added * @param zos * the current zip output stream * @throws FileNotFoundException * @throws IOException */ private static