java压缩文件 博客分类: java 学习笔记 javazip
程序员文章站
2024-03-24 17:19:46
...
package org.liufei.net.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import org.apache.log4j.Logger; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * * @author 刘飞 * */ public class JavaZip { private static final Logger logger = Logger.getLogger(JavaZip.class); /** * 压缩文件file成zip文件zipFile * * @param file * 要压缩的文件 * @param zipFile * 压缩文件存放地方 * @throws IOException */ public static void zip(File file, File zipFile) { ZipOutputStream output = null; try { output = new ZipOutputStream(new FileOutputStream(zipFile)); /** * 顶层目录开始 */ zipFile(output, file, ""); } catch (IOException ex) { logger.error("zip file [ " + file + " ] error.", ex); throw new RuntimeException("zip file [ " + file + " ] error.", ex); } finally { try { /** * 关闭流 */ if (output != null) { output.flush(); output.close(); } } catch (IOException e) { logger.error("close ZipOutputStream [ file : " + zipFile + " ] error.", e); throw new RuntimeException("zip file [ " + zipFile + " ] error.", e); } } } /** * 压缩文件为zip格式 * * @param output * ZipOutputStream对象 * @param file * 要压缩的文件或文件夹 * @param basePath * 条目根目录 * @throws IOException */ private static void zipFile(ZipOutputStream output, File file, String basePath) throws IOException { FileInputStream input = null; try { /** * 文件为目录 */ if (file.isDirectory()) { /** * 得到当前目录里面的文件列表 */ File list[] = file.listFiles(); basePath = basePath + (basePath.length() == 0 ? "" : "/") + file.getName(); /** * 循环递归压缩每个文件 */ for (File f : list) zipFile(output, f, basePath); } else { /** * 压缩文件 */ basePath = (basePath.length() == 0 ? "" : basePath + "/") + file.getName(); output.putNextEntry(new ZipEntry(basePath)); input = new FileInputStream(file); int readLen = 0; byte[] buffer = new byte[1024 * 8]; while ((readLen = input.read(buffer, 0, 1024 * 8)) != -1) output.write(buffer, 0, readLen); } } catch (Exception ex) { logger.error("zip file [ " + file + " ] error.", ex); throw new RuntimeException("zip file [ " + file + " ] error.", ex); } finally { /** * 关闭流 */ if (input != null) input.close(); } } /** * 解压zip文件 * * @param zip * zip文件绝对路径 * @param unZipDir * 解压到的目录 * @throws IOException */ public static void unZip(String zip, String unZipDir) throws IOException { unZip(new File(zip), new File(unZipDir)) ; } /** * 解压zip文件 * * @param zip * zip文件 * @param unZipDir * 解压到的目录文件 * @throws IOException */ @SuppressWarnings("unchecked") public static void unZip(File zip, File unZipDir) throws IOException { ZipFile zipFile = new ZipFile(zip, "GBK"); byte[] buffer = new byte[2048]; int length = -1; OutputStream out = null; InputStream in = null; Enumeration<ZipEntry> zee = zipFile.getEntries(); while (zee.hasMoreElements()) { ZipEntry zipEntry = zee.nextElement(); File loadFile = new File(unZipDir, zipEntry.getName()); if (zipEntry.isDirectory()) { loadFile.mkdirs(); } else { if (!loadFile.getParentFile().exists()) { loadFile.getParentFile().mkdirs(); } out = new FileOutputStream(loadFile, false); in = zipFile.getInputStream(zipEntry); while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } } } if (in != null) { in.close(); } if (out != null) { out.flush(); out.close(); } } }
推荐阅读
-
java压缩文件 博客分类: java 学习笔记 javazip
-
java 压缩文件 解压文件 博客分类: 技术 zipjava
-
DK、JRE、JVM的区别及JavaSE、JavaEE和JavaME的区别 博客分类: java基础javaWeb学习
-
Adaptor-适配器模式-1 博客分类: Java设计模式学习 JavaAdapter适配器
-
java压缩文件或文件夹 博客分类: java开发 zipjava
-
java以zip格式实现压缩解压,有界面 博客分类: javazip界面压缩解压 javazip界面压缩解压
-
java压缩zip文件乱码问题 博客分类: Java JavaZip压缩文件中文乱码乱码
-
java实现zip与unzip 博客分类: JAVA JAVAzip
-
利用java解压.zip的压缩文件 博客分类: J2EE java解压zip
-
java学习--继承 博客分类: java java