关于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
原创粉丝点击