zip 的 压缩与解压

来源:互联网 发布:西门子em232编程 编辑:程序博客网 时间:2024/04/30 01:08

zip格式是开源的相比rar格式,zip的压缩和解压都是很方便的,我们需要用到apache ant 项目里的 ant.jar

点击下载 :http://download.csdn.net/detail/xiananliu/7211325

先附上 解压的 方法


 /**  * 解压zip包的内容到指定的目录下,可以处理其文件夹下包含子文件夹的情况  *   * @param zipFilename  *            要解压的zip   * @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 {    if(in!=null){        in.close();    }    if(out!=null){         out.close();    }}       }  }  zipFile.close(); }

这段代码是我到网上找的,我的项目中用到了解压,而且在解压后出现了源文件无法删除的问题。。。

最后一句zipFile.close() 解决了这个问题,除了关闭输入输出流。还要关闭这个  zipFile 对象。具体怎么回事我也不是很清楚

这个 zipFile 是 org.apache.tools.zip.ZipFile类型的

我找到了 java.util.zip.ZipFile 的close()方法说明:

关闭此 ZIP 文件将关闭以前调用 getInputStream 方法返回的所有输入流。

我想大概是一样的吧。本人愚钝请不吝赐教。。。。。

下面是压缩的方法:

 /**  * 压缩文件或者文件目录到指定的zip  *   * @param inputFilename  *            要压缩的文件或者文件夹,如果是文件夹的话,会将文件夹下的所有文件包含子文件夹的内容进行压缩  * @param zipFilename  *            生成的zip或者rar文件的名称  */ public synchronized void zip(String inputFilename, String zipFilename)   throws IOException {  zip(new File(inputFilename), zipFilename); } /**  * 压缩文件或者文件目录到指定的zip,内部调用  *   * @param inputFile  *            参数为文件类型的要压缩的文件或者文件夹  * @param zipFilename  *            生成的zip文件的名称  * @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  *   * @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的压缩解压就是这样了。谢谢您的围观


0 0
原创粉丝点击