Zip文件压缩Java类代码
jopen
12年前
public class ZipFileUtil { private final static int BUFFER=2048; /** * 解压zip文件 * * @param zipFilePath * zip文件绝对路径 * @param unzipDirectory * 解压到的目录 * @throws Exception */ @SuppressWarnings("unchecked") public static boolean unzip(String zipFilePath, String unzipDirectory) throws Exception { boolean flag=true; try{ // 创建文件对象 File file = new File(zipFilePath); // 创建zip文件对象 ZipFile zipFile = new ZipFile(file); // 创建本zip文件解压目录 File unzipFile = new File(unzipDirectory + "/" + getSuffixName(file.getName())); if (unzipFile.exists()) unzipFile.delete(); unzipFile.mkdir(); // 得到zip文件条目枚举对象 Enumeration zipEnum = zipFile.getEntries(); // 定义输入输出流对象 InputStream input = null; OutputStream output = null; // 定义对象 ZipEntry entry = null; // 循环读取条目 while (zipEnum.hasMoreElements()) { // 得到当前条目 entry = (ZipEntry) zipEnum.nextElement(); String entryName = new String(entry.getName()); // 用/分隔条目名称 String names[] = entryName.split("\\/"); int length = names.length; String path = unzipFile.getAbsolutePath(); for (int v = 0; v < length; v++) { if (v < length - 1) { // 最后一个目录之前的目录 path += "/" + names[v] + "/"; createDir(path); } else { // 最后一个 if (entryName.endsWith("/")) // 为目录,则创建文件夹 createDir(unzipFile.getAbsolutePath() + "/" + entryName); else { // 为文件,则输出到文件 input = zipFile.getInputStream(entry); output = new FileOutputStream(new File(unzipFile .getAbsolutePath() + "/" + entryName)); byte[] buffer = new byte[1024 * 8]; int readLen = 0; while ((readLen = input.read(buffer, 0, 1024 * 8)) != -1) output.write(buffer, 0, readLen); // 关闭流 input.close(); output.flush(); output.close(); } } } }}catch(Exception e){ flag=false; } return flag; } /** * 创建目录 * * @param path * 目录绝对路径名 */ static void createDir(String path) { File dir = new File(path); if (dir.exists() == false) dir.mkdir(); } /** * 取得文件名,不包含后缀名 * * @param name * 完整文件名 * @return 文件名(不包含后缀名) */ static String getSuffixName(String name) { return name.substring(0, name.lastIndexOf(".")); } /** * * 压缩多个文件 * * @param zipFileName * 压缩后的文件名 * * @param inputFiles 待压缩的文件列表 * */ public static boolean zipFile(String zipFileName, List<File> inputFiles){ boolean test = true; try { BufferedInputStream origin = null; FileOutputStream dest = new FileOutputStream(zipFileName); ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream( dest)); byte data[] = new byte[BUFFER]; for (int i = 0; i < inputFiles.size(); i++) { File file=inputFiles.get(i); FileInputStream fi = new FileInputStream(file); origin = new BufferedInputStream(fi, BUFFER); ZipEntry entry = new ZipEntry(file.getName()); out.putNextEntry(entry); int count; while ((count = origin.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } origin.close(); } out.close(); } catch (Exception e) { test = false; e.printStackTrace(); } return test; } /** * * 压缩多个文件 * * @param zipFileName * 压缩后的文件名 * * @param inputFiles 待压缩的文件列表 * */ public static boolean zip(String zipFileName, List<String> inputFiles){ boolean test = true; try { BufferedInputStream origin = null; FileOutputStream dest = new FileOutputStream(zipFileName); ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream( dest)); byte data[] = new byte[BUFFER]; for (int i = 0; i < inputFiles.size(); i++) { File file = new File(inputFiles.get(i)); FileInputStream fi = new FileInputStream(file); origin = new BufferedInputStream(fi, BUFFER); ZipEntry entry = new ZipEntry(file.getName()); out.putNextEntry(entry); int count; while ((count = origin.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } origin.close(); } out.close(); } catch (Exception e) { test = false; e.printStackTrace(); } return test; } }