关于java解压缩文件(rar或者zip)的实现示例
来源:互联网 发布:淘宝仓管岗位职责 编辑:程序博客网 时间:2024/05/29 10:29
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Enumeration;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;/** * <p> * Title: 解压缩文件 * </p> * <p> * Description: 通过apache的zip工具实现解压缩 * </p> * <p> * Copyright: Copyright (c) 2010 * </p> * <p> * Company: yourcompany * </p> * * @author yourcompany * @version 1.0 */public class CompressFile { private static CompressFile instance = new CompressFile(); private CompressFile() { } public static CompressFile getInstance() { return instance; } /** * 压缩文件或者文件目录到指定的zip或者rar包 * * @param inputFilename * 要压缩的文件或者文件夹,如果是文件夹的话,会将文件夹下的所有文件包含子文件夹的内容进行压缩 * @param zipFilename * 生成的zip或者rar文件的名称 */ public synchronized void zip(String inputFilename, String zipFilename) throws IOException { zip(new File(inputFilename), zipFilename); } /** * 压缩文件或者文件目录到指定的zip或者rar包,内部调用 * * @param inputFile * 参数为文件类型的要压缩的文件或者文件夹 * @param zipFilename * 生成的zip或者rar文件的名称 * @return void */ private synchronized void zip(File inputFile, String zipFilename) throws IOException { ZipOutputStream out = new ZipOutputStream(new FileOutputStream( zipFilename)); try { zip(inputFile, out, ""); } catch (IOException e) { throw e; } finally { out.close(); } } /** * 压缩文件或者文件目录到指定的zip或者rar包 * * @param inputFile * 参数为文件类型的要压缩的文件或者文件夹 * @param out * 输出流 * @param base * 基文件夹 * @return void */ private synchronized void zip(File inputFile, ZipOutputStream out, String base) throws IOException { if (inputFile.isDirectory()) { File[] inputFiles = inputFile.listFiles(); out.putNextEntry(new ZipEntry(base + "/")); base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i < inputFiles.length; i++) { zip(inputFiles[i], out, base + inputFiles[i].getName()); } } else { if (base.length() > 0) { out.putNextEntry(new ZipEntry(base)); } else { out.putNextEntry(new ZipEntry(inputFile.getName())); } FileInputStream in = new FileInputStream(inputFile); try { int c; byte[] by = new byte[BUFFEREDSIZE]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } } catch (IOException e) { throw e; } finally { in.close(); } } } /** * 解压zip或者rar包的内容到指定的目录下,可以处理其文件夹下包含子文件夹的情况 * * @param zipFilename * 要解压的zip或者rar包文件 * @param outputDirectory * 解压后存放的目录 */ public synchronized void unzip(String zipFilename, String outputDirectory) throws IOException { File outFile = new File(outputDirectory); if (!outFile.exists()) { outFile.mkdirs(); } ZipFile zipFile = new ZipFile(zipFilename); Enumeration en = zipFile.getEntries(); ZipEntry zipEntry = null; while (en.hasMoreElements()) { zipEntry = (ZipEntry) en.nextElement(); if (zipEntry.isDirectory()) { // mkdir directory String dirName = zipEntry.getName(); // System.out.println("=dirName is:=" + dirName + "=end="); dirName = dirName.substring(0, dirName.length() - 1); File f = new File(outFile.getPath() + File.separator + dirName); f.mkdirs(); } else { // unzip file String strFilePath = outFile.getPath() + File.separator + zipEntry.getName(); File f = new File(strFilePath); // the codes remedified by can_do on 2010-07-02 =begin= // /////begin///// // 判断文件不存在的话,就创建该文件所在文件夹的目录 if (!f.exists()) { String[] arrFolderName = zipEntry.getName().split("/"); String strRealFolder = ""; for (int i = 0; i < (arrFolderName.length - 1); i++) { strRealFolder += arrFolderName[i] + File.separator; } strRealFolder = outFile.getPath() + File.separator + strRealFolder; File tempDir = new File(strRealFolder); // 此处使用.mkdirs()方法,而不能用.mkdir() tempDir.mkdirs(); } // /////end/// // the codes remedified by can_do on 2010-07-02 =end= f.createNewFile(); InputStream in = zipFile.getInputStream(zipEntry); FileOutputStream out = new FileOutputStream(f); try { int c; byte[] by = new byte[BUFFEREDSIZE]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } // out.flush(); } catch (IOException e) { throw e; } finally { out.close(); in.close(); } } } } private static final int BUFFEREDSIZE = 1024; public static void main(String[] args) { CompressFile bean = new CompressFile(); try { boolean isZip = false; if (isZip) { bean.zip("E:\\20100707", "d:/test_rar.zip"); } else { bean.unzip("d:/test_rar.zip", "D:/temp"); } } catch (IOException e) { e.printStackTrace(); } }}
0 0
- 关于java解压缩文件(rar或者zip)的实现示例
- 关于java解压缩文件(rar或者zip)的实现示例
- java 实现解压缩文件(ZIP/rar)
- java实现对rar文件和zip文件的解压缩
- java解压缩文件的实现示例,支持rar和zip格式 ____http://my.oschina.net/manville/blog/280420
- ZIP/RAR解压缩(JAVA)
- JAVA 实现压缩与解压缩 rar和zip格式的文件
- java实现单个或多个文件的压缩、解压缩 支持zip、rar等格式
- java压缩解压缩rar、zip文件
- Java 解压rar 解压缩zip
- java压缩解压缩rar、zip 、tar文件 工具类源码
- Java解压缩-Rar文件
- 用java解压缩zip和rar的工具类
- 用java解压缩zip和rar的工具类
- linux中rar文件解压缩的实现
- linux下解压缩rar、zip文件方法
- Android中用Java代码实现zip文件解压缩(二)
- JAVA实现压缩/解压缩zip文件
- Android虚拟机横竖屏间的切换
- Erlang开发MMO的一些思考
- 【Android开发日记】微信API 分享到朋友圈
- Struts2+MyBatis3.1.0+Spring3.1.0整合之道二SqlSessionTemplate
- [LeetCode]Maximum Depth of Binary Tree
- 关于java解压缩文件(rar或者zip)的实现示例
- 用java压缩文件夹/文件
- 用java压缩文件夹/文件
- 东主楼小集群PBS用法
- java压缩和解压缩Zip、Jar、Gzip文件
- 【Android】ActivityManager结构图
- Bit manipulation
- HDOJ-1823(矩形树,点更新 + 区间查询)
- java实现文件转换成二进制存储与取出