javazip打包和压缩
使用java原始的zip压缩类打包和减压缩文件,缺点是如果文件夹或者文件名为中文会出现乱码
如果需要支持中文的,可以采用apache的org.apache.tools.zip.ZipOutputStream
?
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;/** * 打包zip工具类,缺点是如果目录有中文乱码 * @author 流浪鱼 */public class ZipUtil{/** * 文件压缩 * @param zipFileName * @param inputFile * @throws Exception */public static void zip(String zipFileName, String inputFile) throws Exception {zip(zipFileName, new File(inputFile));}/** * 压缩文件 * @param zipFileName 生成文件名 * @param inputFile 需要压缩文件流 * @throws Exception */public static void zip(String zipFileName, File inputFile) throws Exception {ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));zip(out, inputFile, "");out.close();}/** * 解压zip文件 * @param zipFileName * @param outputDirectory 解压到的文件夹 * @throws Exception */public static void unzip(String zipFileName, String outputDirectory)throws Exception {ZipInputStream in = new ZipInputStream(new FileInputStream(zipFileName));ZipEntry z;while ((z = in.getNextEntry()) != null){System.out.println("unziping " + z.getName());if (z.isDirectory()){String name = z.getName();name = name.substring(0, name.length() - 1);File f = new File(outputDirectory + File.separator + name);f.mkdir();System.out.println("mkdir " + outputDirectory + File.separator+ name);}else {File f = new File(outputDirectory + File.separator+ z.getName());f.createNewFile();FileOutputStream out = new FileOutputStream(f);int b;while ((b = in.read()) != -1)out.write(b);out.close();}}in.close();}/** * 文件压缩 * @param out zip输出流 * @param f 需要压缩的文件,可以为文件夹也可以为文件 * @param base * @throws Exception */public static void zip(ZipOutputStream out, File f, String base) throws Exception {if (f.isDirectory()){File[] fl = f.listFiles();out.putNextEntry(new ZipEntry(base + "/"));base = base.length() == 0 ? "" : base + "/";for (int i = 0; i < fl.length; i++){zip(out, fl[i], base + fl[i].getName());}}else{out.putNextEntry(new ZipEntry(base));FileInputStream in = new FileInputStream(f);int b;while ((b = in.read()) != -1)out.write(b);in.close();}}public static void main(String[] args) {String sourceDir = "E:/fmpptest";String targetDir="e:/";File f =new File(sourceDir);String zipName = targetDir+"测试.zip"; try {zip(zipName,f); unzip(zipName,"c:/test");? } catch (Exception e) {e.printStackTrace();}}}