JAVA中压缩与解压缩
2016-06-18 09:19
330 查看
以压缩Zip文件为例。主要是通过ZipOutputStream类实现。解压缩主要使用ZipFile类和ZipInputStream以及ZipEntry类。
ZipInputStream 获取压缩文件中的每个ZipEntry,然后ZipFile通过ZipEntry拿到输入流。
package main; import java.io.*; import java.util.*; import java.util.zip.*; public class Main { public static final Integer BUFFERSIZE = 1024*1024; public static void main(String[] args) throws Exception { File fileNeedToBeCompressed = new File("C:" + File.separator + "D" + File.separator + "code" + File.separator + "output.xml"); StringBuffer zipFilePath = new StringBuffer(fileNeedToBeCompressed.getParent()); zipFilePath.append(File.separator).append(getFileName(fileNeedToBeCompressed.getName())).append(".zip"); File compressedFile = new File(zipFilePath.toString()); InputStream is = null; ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(compressedFile)); if(fileNeedToBeCompressed.isDirectory()) { //压缩一个文件夹 File[] files = fileNeedToBeCompressed.listFiles(); for(File file : files) { compressFile(file, is, zos); } } else { //压缩一个文件 compressFile(fileNeedToBeCompressed,is,zos); } zos.close(); System.out.println("///~ Main done"); } public static String getFileName(String fileName) { if(fileName.lastIndexOf('.') < 0) { return fileName; } else { return fileName.substring(0,fileName.lastIndexOf('.')); } } public static void compressFile(File fileNeedToBeCompressed,InputStream is,ZipOutputStream zos) throws Exception { System.out.println("正在压缩:" + fileNeedToBeCompressed.getName()); is = new FileInputStream(fileNeedToBeCompressed); zos.putNextEntry(new ZipEntry(fileNeedToBeCompressed.getName())); int bytesReaded = 0; byte[] buffer = new byte[BUFFERSIZE]; while((bytesReaded = is.read(buffer)) > 0) { zos.write(buffer,0,bytesReaded); } is.close(); } }
ZipInputStream 获取压缩文件中的每个ZipEntry,然后ZipFile通过ZipEntry拿到输入流。
package main; import java.io.*; import java.util.*; import java.util.zip.*; public class Main { public static final Integer BUFFERSIZE = 1024*1024; public static void main(String[] args) throws Exception { // { // File fileNeedToBeCompressed = new File("C:" + File.separator + "D" + File.separator + "code" + File.separator + "resource"); // StringBuffer zipFilePath = new StringBuffer(fileNeedToBeCompressed.getParent()); // zipFilePath.append(File.separator).append(getFileName(fileNeedToBeCompressed.getName())).append(".zip"); // File compressedFile = new File(zipFilePath.toString()); // // // InputStream is = null; // ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(compressedFile)); // // if(fileNeedToBeCompressed.isDirectory()) // { // //压缩一个文件夹 // File[] files = fileNeedToBeCompressed.listFiles(); // for(File file : files) // { // compressFile(file, is, zos); // } // } // else // { // //压缩一个文件 // // compressFile(fileNeedToBeCompressed,is,zos); // } // zos.close(); // } { String zipFilePath = "C:" + File.separator + "D" + File.separator + "code" + File.separator + "resource.zip"; ZipFile zipFile = new ZipFile(zipFilePath); ZipInputStream zis = new ZipInputStream(new FileInputStream(new File(zipFilePath))); ZipEntry tempZipEntry = null; OutputStream os = null; byte[] buffer = new byte[BUFFERSIZE]; File unzipedFolder = new File(getFileName(zipFile.getName())); int bytesReaded = 0; if(!unzipedFolder.exists()) unzipedFolder.mkdirs(); while((tempZipEntry = zis.getNextEntry())!= null) { System.out.println("正在解压:" + tempZipEntry.getName()); File newFile = new File(unzipedFolder.getPath() + File.separator + tempZipEntry.getName()); InputStream is = zipFile.getInputStream(tempZipEntry); os = new FileOutputStream(newFile); while(( bytesReaded = is.read(buffer)) > 0) { os.write(buffer, 0, bytesReaded); } os.close(); } zipFile.close(); zis.close(); } System.out.println("///~ Main done"); } public static String getFileName(String fileName) { if(fileName.lastIndexOf('.') < 0) { return fileName; } else { return fileName.substring(0,fileName.lastIndexOf('.')); } } public static void compressFile(File fileNeedToBeCompressed,InputStream is,ZipOutputStream zos) throws Exception { System.out.println("正在压缩:" + fileNeedToBeCompressed.getName()); is = new FileInputStream(fileNeedToBeCompressed); zos.putNextEntry(new ZipEntry(fileNeedToBeCompressed.getName())); int bytesReaded = 0; byte[] buffer = new byte[BUFFERSIZE]; while((bytesReaded = is.read(buffer)) > 0) { zos.write(buffer,0,bytesReaded); } is.close(); } }
相关文章推荐
- Access restriction: The type 'JPEGCodec' is not API 报错
- eclipse如何创建web项目
- Java关键字volatile修饰变量
- Java千百问_08JDK详解(007)_javac是什么
- 【SpringMVC学习01】宏观上把握SpringMVC框架
- Java千百问_02基本使用(009)_eclipse如何设置BuildPath
- Java千百问_04异常处理(008)_java中常见的错误有哪些
- Java千百问_04异常处理(007)_常见的java异常有哪些(非运行时)
- 使用Eclipse Installer安装Eclipse
- 简单的java代码在内存加载过程(详解)
- spring MVC学习笔记
- spring MVC学习笔记
- Eclipse+ADT+Android SDK 搭建安卓开发环境
- JAVA中的static关键字
- springSecurity集成cas
- 20145314郑凯杰 《Java程序设计》课程总结
- 框架 day56 BOS项目练习(activiti,历史数据操作,流程变量,任务组,监听器,网关,spring整合)
- (JAVA+TESTNG 二)Eclipse+TestNG搭建接口自动化测试框架
- java 常用习惯用法总结
- java并发编程实战笔记-死锁