java实现zip的压缩和解压
2015-11-19 14:55
645 查看
package cn.tzz.zip; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public class ZipUtils { /** * 文件压缩(支持一次压缩多个文件,文件存放至一个文件夹中) * 中文名乱码,采用Apache的zip包可解决 */ public static void ZipFile(String filepath ,String zippath) { try { File file = new File(filepath);// 要被压缩的文件夹 File zipFile = new File(zippath); InputStream input = null; ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile)); if(file.isDirectory()){//压缩文件夹 File[] files = file.listFiles(); for(int i = 0; i < files.length; ++i){ input = new FileInputStream(files[i]); zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files[i].getName())); int temp = 0; while((temp = input.read()) != -1){ zipOut.write(temp); } input.close(); } zipOut.close(); }else{//压缩单个文件 input = new FileInputStream(file); String fileName = new String(file.getName().getBytes(), "UTF-8"); zipOut.putNextEntry(new ZipEntry(fileName)); int temp = 0; while((temp = input.read()) != -1){ zipOut.write(temp); } input.close(); zipOut.close(); } zipOut.close(); } catch (Exception e) { e.printStackTrace(); } } /** 解压缩(解压缩单个文件)*/ public static void ZipContraFile(String zippath ,String outfilepath ,String filename) { try { File file = new File(zippath);//压缩文件路径和文件名 File outFile = new File(outfilepath);//解压后路径和文件名 ZipFile zipFile = new ZipFile(file); ZipEntry entry = zipFile.getEntry(filename);//所解压的文件名 InputStream input = zipFile.getInputStream(entry); OutputStream output = new FileOutputStream(outFile); int temp = 0; while((temp = input.read()) != -1){ output.write(temp); } input.close(); output.close(); } catch (Exception e) { e.printStackTrace(); } } /** 解压缩(压缩文件中包含多个文件)可代替上面的方法使用。 * ZipInputStream类 * 当我们需要解压缩多个文件的时候,ZipEntry就无法使用了, * 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类 * */ public static void ZipContraMultiFile(String zippath ,String outzippath){ try { File file = new File(zippath); File outFile = null; ZipFile zipFile = new ZipFile(file); ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file)); ZipEntry entry = null; InputStream input = null; OutputStream output = null; while((entry = zipInput.getNextEntry()) != null){ System.out.println("解压缩" + entry.getName() + "文件"); outFile = new File(outzippath + File.separator + entry.getName()); if(!outFile.getParentFile().exists()){ outFile.getParentFile().mkdir(); } if(!outFile.exists()){ outFile.createNewFile(); } input = zipFile.getInputStream(entry); output = new FileOutputStream(outFile); int temp = 0; while((temp = input.read()) != -1){ output.write(temp); } input.close(); output.close(); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { ZipFile("E:/zip/中文名.txt", "E:/zip/压缩单个文件.zip"); ZipFile("E:/zip", "E:/压缩多个文件.zip"); ZipContraFile("E:/zip/压缩单个文件.zip","E:/zip/解压文件.txt", "1.txt"); ZipContraMultiFile("E:/压缩多个文件.zip","E:/zip2"); System.out.println("********执行成功**********"); } }
相关文章推荐
- js md5加密和 java后台md5加密
- ubuntu通过apt-get安装JDK8
- java身份证合法性校验
- java regex possissive relunctant
- JAVA实现EXL的导入导出功能
- Java default protected
- Java内功提升之运算符
- Java发送Email
- Eclipse用法和技巧四:生成说明文档1
- Maven问题总结:Eclipse中项目右键菜单中点击Maven->Update Projects时JDK被重置
- PhoneGap插件调用Java流程源码分析(四)
- 线程池ExecutorService的submit和execute
- Eclipse下Android开发的问题:Failed to install AndroidPhone.apk on device 'emulator-5554': timeout 解决办法
- Java的Spring框架下RMI与quartz的调用方法
- Java遍历Map
- Java Url请求方式中文乱码问题解决办法
- Eclipse下Android开发的问题:Installation error: INSTALL_FAILED_NO_MATCHING_ABIS 解决办法
- java单例模式的7种写法
- java获取访问者的IP
- Java的Spring框架的三种连接池的基本用法示例