java zip,unzip
来源:互联网 发布:如何防御网络攻击 编辑:程序博客网 时间:2024/05/21 09:29
package com.eric.io;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;public class Decompression { private static final int BUFFEREDSIZE = 1024; public Decompression() { } /** * 解压zip格式的压缩文件到当前文件夹 * * @param zipFileName * @throws Exception */ @SuppressWarnings("unchecked") public synchronized void unzipFile(String zipFileName) throws Exception { try { File f = new File(zipFileName); ZipFile zipFile = new ZipFile(zipFileName); if ((!f.exists()) && (f.length() <= 0)) { throw new Exception("要解压的文件不存在!"); } System.out.println(zipFileName + " was uncompressing...."); String strPath, gbkPath, strtemp; File tempFile = new File(f.getParent()); strPath = tempFile.getAbsolutePath(); java.util.Enumeration e = zipFile.getEntries(); while (e.hasMoreElements()) { org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e .nextElement(); gbkPath = zipEnt.getName(); System.out.println("uncomress:" + zipEnt.getName()); if (zipEnt.isDirectory()) { strtemp = strPath + "/" + gbkPath; File dir = new File(strtemp); dir.mkdirs(); continue; } else { // 读写文件 InputStream is = zipFile.getInputStream(zipEnt); BufferedInputStream bis = new BufferedInputStream(is); gbkPath = zipEnt.getName(); strtemp = strPath + "/" + gbkPath; // 建目录 String strsubdir = gbkPath; for (int i = 0; i < strsubdir.length(); i++) { if (strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + "/" + strsubdir.substring(0, i); File subdir = new File(temp); if (!subdir.exists()) subdir.mkdir(); } } FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos); int c; while ((c = bis.read()) != -1) { bos.write((byte) c); } bos.close(); fos.close(); } } } catch (Exception e) { e.printStackTrace(); throw e; } } /** * 解压zip格式的压缩文件到指定位置 * * @param zipFileName * 压缩文件 * @param extPlace * 解压目录 * @throws Exception */ @SuppressWarnings("unchecked") public synchronized void unzip(String zipFileName, String extPlace) throws Exception { try { (new File(extPlace)).mkdirs(); File f = new File(zipFileName); ZipFile zipFile = new ZipFile(zipFileName); if ((!f.exists()) && (f.length() <= 0)) { throw new Exception("要解压的文件不存在!"); } String strPath, gbkPath, strtemp; File tempFile = new File(extPlace); strPath = tempFile.getAbsolutePath(); java.util.Enumeration e = zipFile.getEntries(); while (e.hasMoreElements()) { org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e .nextElement(); gbkPath = zipEnt.getName(); if (zipEnt.isDirectory()) { strtemp = strPath + File.separator + gbkPath; File dir = new File(strtemp); dir.mkdirs(); continue; } else { // 读写文件 InputStream is = zipFile.getInputStream(zipEnt); BufferedInputStream bis = new BufferedInputStream(is); gbkPath = zipEnt.getName(); strtemp = strPath + File.separator + gbkPath; // 建目录 String strsubdir = gbkPath; for (int i = 0; i < strsubdir.length(); i++) { if (strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) { String temp = strPath + File.separator + strsubdir.substring(0, i); File subdir = new File(temp); if (!subdir.exists()) subdir.mkdir(); } } FileOutputStream fos = new FileOutputStream(strtemp); BufferedOutputStream bos = new BufferedOutputStream(fos); int c; while ((c = bis.read()) != -1) { bos.write((byte) c); } bos.close(); fos.close(); } } } catch (Exception e) { e.printStackTrace(); throw e; } } /** * 压缩zip格式的压缩文件 * * @param inputFilename * 压缩的文件或文件夹及详细路径 * @param zipFilename * 输出文件名称及详细路径 * @throws IOException */ public synchronized void zip(String inputFilename, String zipFilename) throws IOException { zip(new File(inputFilename), zipFilename); } /** * 压缩zip格式的压缩文件 * * @param inputFile * 需压缩文件 * @param zipFilename * 输出文件及详细路径 * @throws IOException */ public synchronized void zip(File inputFile, String zipFilename) throws IOException { ZipOutputStream out = new ZipOutputStream(new FileOutputStream( zipFilename)); try { zip(inputFile, out, ""); System.out.println(zipFilename + " was genrated successful...."); } catch (IOException e) { throw e; } finally { out.close(); } } /** * 压缩zip格式的压缩文件 * * @param inputFile * 需压缩文件 * @param out * 输出压缩文件 * @param base * 结束标识 * @throws IOException */ @SuppressWarnings("unused") private synchronized void zip(File inputFile, ZipOutputStream out, String base) throws IOException { System.out.println("compress " + inputFile + " ..."); 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++) { System.out.println("compress file:" + inputFiles[i].getName()); 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(); } } } // public static void main(String[] args) { // Decompression decompression = new Decompression(); // try { // decompression.unzipFile("c:/test.zip"); // decompression.unzip("c:/test.zip", "c:/test22"); // decompression.zip("c:/test22", "c:/test222.zip"); // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // }}
转自:http://blog.csdn.net/eric_sunah/article/details/7082056
阅读全文
0 0
- java zip,unzip
- java实现zip与unzip
- java实现zip与unzip
- java实现zip与unzip
- Java Zip/Unzip Files 记录
- zip/unzip
- zip&unzip
- ZIP and UNZIP with Passwords in Java
- 软件开发工具推荐:ZeroTurnaround ZIP 类库(java zip/unzip)
- How to use use zip/unzip in java?
- Java 文件压缩和解压 Zip and Unzip
- zip、unzip工具类
- Linux zip/unzip
- Zip,UnZip函数库
- zip与unzip命令
- zip,unzip 命令
- 【Linux】 zip与unzip
- zip 和 unzip
- 各种小马小结
- jQuery Mobile中面板panel的data-*选项
- [编程题] 分饼干
- 《3D捕鱼机》游戏隐私政策
- opencv检测直线方法——霍夫变换
- java zip,unzip
- HTML中的role属性
- Beanstalkd+Supervisor构建消息队列
- 循环神经网络RNN
- opencv cmakelists
- JAVA 定时器的三种方法
- ansible之loops
- 学习mysql时经常用到的语句和错误
- 关于javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 25;