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
- zip 的 压缩与解压
- ZIP压缩与解压
- java zip文件的压缩与解压
- Linux zip包的压缩与解压
- 正确的 zip 压缩与解压代码
- C++ zip文件的解压与压缩
- php zip文件的解压与压缩
- C++ zip文件的解压与压缩
- 简单的Zip压缩与解压
- iPhone zip压缩与解压
- iPhone zip压缩与解压
- iPhone zip压缩与解压
- iPhone zip压缩与解压
- iPhone zip压缩与解压
- java zip 压缩与解压
- 文件zip压缩与解压
- unity-zip压缩与解压
- python_压缩与解压zip
- 关于 Caused by:.. /proc/net/xt_qtaguid/stats:open failed: ENOENT (No such file or directory)问题的解决
- 关于iOS农网AppStore提交遇到的问题小结
- Android开发---获取屏幕高度和宽度
- Java多线程总结
- asp.net播放声音
- zip 的 压缩与解压
- transform.rotation
- JAVA CAS原理深度分析
- 页面中ActiveX控件初始化时崩溃的解决办法
- 最全面的linux信号量解析
- MTK平台安卓手机性能测试方法
- 《Java解惑》系列——02字符谜题——谜题13:动物庄园(字符串的==和equals)
- 设计师专宠,Startup强大的UI设计框架
- SharePoint 2013 App Development读书笔记7