Java中文件的压缩与解压
2016-01-11 11:56
483 查看
Java中通过ZipOutputStream和ZipInputStream实现对一个或多个文件的压缩与解压。压缩时文件时,创建zip输出流,并在流中添加zip条目,用流把文件的内容写入压缩文件中。解压时,创建zip输入流,并分别创建文件夹和zip条目对应的文件,再用流把zip条目中的内容写入个文件中。以下分别展示了如何对一个文件和多个文件实现压缩与解压。
解压:
解压:
一个文件的压缩与解压
压缩:import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /* * 需求:将E盘下的zipTest1.txt文件 压缩成 zipTest1.zip文件 * 分析: * 1.利用ZipOutputStream 中的write方法压缩文件。 * 2.压缩时,文件被压缩成了zip文件中对应的ZipEntry(zip条目), * zip条目的名字需要设置。 * 实现: * 1.根据原文件名获取相应的压缩文件和zip条目的名字; * 2.创建文件输入流,读入原文件;创建zip输出流,压缩文件; * 3.创建zip条目,并将其添加至zip输出流中; * 4.调用write方法,将原文件的内容写入至zip条目中; * 5.关闭zip条目,关闭相关流。 */ public class ZipOutTest1 { public static void main(String[] args) { String name = "E:\\zipTest1.txt"; //原文件路径 try { zipOut(name); } catch (IOException e) { System.out.println("压缩文件时出错!"); } } private static void zipOut(String name) throws IOException { // 根据原文件名得到zip格式的文件名 String zipName = name.substring(0, name.indexOf(".")) + ".zip"; // 根据原文件名得到zip条目的名称,即文件在压缩文件中的名字 String zeName = name.substring(name.indexOf("\\")+1); // 创建文件输入流 、 文件输出流、 zip输出流 FileInputStream fis = new FileInputStream(name); FileOutputStream fos = new FileOutputStream(zipName); ZipOutputStream zos = new ZipOutputStream(fos); // 创建zip条目,并将其添加至zip输出流中 ZipEntry ze = new ZipEntry(zeName); zos.putNextEntry(ze); // 压缩文件 byte[] buf = new byte[1024]; int len; while ((len = fis.read(buf)) != -1) { zos.write(buf,0,len); zos.closeEntry(); } // 关闭流,只有在关闭流后,文件内容才能写入成功 zos.close(); fis.close(); } }
解压:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /* * 需求:将E盘下的zipTest1.zip文件 进行解压。 * 分析: * 1.解压文件用 Zip输入流 读入文件内容后用 文件输出流 输出文件。 * 2.要根据压缩文件名和zip条目名获取解压后文件的名字。 * 实现: * 1.创建zip输入流; * 2.创建zip条目; * 3.解压文件按过程中,获取解压后文件的名字后将文件内容输出; * 4.关闭zip条目和相关流。 */ public class ZipInTest1 { public static void main(String[] args) { String zipName = "E:\\zipTest1.zip";// 压缩文件名 try { zipIn(zipName); } catch (IOException e) { System.out.println("解压文件时出错!"); } } private static void zipIn(String zipName) throws IOException { // 创建zip输入流 FileInputStream fis = new FileInputStream(zipName); ZipInputStream zis = new ZipInputStream(fis); FileOutputStream fos = null; // 创建zip条目 ZipEntry ze; // 解压文件 while ((ze = zis.getNextEntry()) != null) { // 根据压缩文件名和zip条目的名字获取解压后文件的名字 String fileName = zipName.substring(0, zipName.indexOf("\\") + 1) + ze.getName(); // 创建文件输出流 fos = new FileOutputStream(fileName); byte[] buf = new byte[1024]; int len; while ((len = zis.read(buf)) != -1) { fos.write(buf, 0, len); } zis.closeEntry(); } zis.close(); if (fos != null) fos.close(); } } // 其实以上代 4000 码也可以实现压缩文件中的多个文件的解压, // 只不过解压后的文件不在一个文件夹内。
多个文件的压缩与解压
压缩:import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /* * 将zipTest文件夹内的多个文件压缩成zip文件 * 分别为每个文件创建对应的zip条目,并将内容写入 */ public class ZipOutTest2 { public static void main(String[] args) { File srcFile = new File("E:\\zipTest");//原文件所在文件夹 File destFile = new File("E:\\zipTest.zip");// 压缩后的文件 try { zipOut(srcFile, destFile); } catch (IOException e) { System.out.println("压缩文件时出错!"); } } private static void zipOut(File file, File dest) throws IOException { // 创建文件输入流 和 zip输出流 FileInputStream fis = null; ZipOutputStream zos = new ZipOutputStream( new FileOutputStream(dest)); // 获取文件夹内所以File对象,并将各文件逐一压缩 File[] files = file.listFiles(); for (File f : files) { fis = new FileInputStream(f);// 读入单个文件 // 为每个文件添加zip条目 zos.putNextEntry(new ZipEntry(f.getName())); // 将各文件压缩 byte[] buf = new byte[1024]; int len; while ((len = fis.read(buf)) != -1) { zos.write(buf, 0, len); } zos.closeEntry(); } zos.close(); if (fis != null) fis.close(); } }
解压:
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /* * 对压缩文件中的多个文件解压至指定的文件夹内 * 利用循环分别为每个zip条目创建对应的文件,并用流写入内容 */ public class ZipInTest2 { public static void main(String[] args) { File srcFile = new File("E:\\zipTest.zip"); File destFile = new File("E:\\zipTest"); try { zipIn(srcFile, destFile); } catch (IOException e) { System.out.println("解压文件时出错!"); } } private static void zipIn(File srcFile, File destFile) throws IOException { // 创建zip输入流 ZipInputStream zis = new ZipInputStream(new FileInputStream(srcFile)); FileOutputStream fos = null; // 解压文件 ZipEntry ze; while ((ze = zis.getNextEntry()) != null) { // 创建目标文件夹和目标文件,方便后面将内容写入这些文件 // 压缩文件中各条目的File对象 File file = new File(destFile, ze.getName()); destFile.mkdirs(); // 创建文件夹 file.createNewFile(); // 创建文件 // 为各zip条目创建输出流 fos = new FileOutputStream(file); byte[] buf = new byte[1024]; int len; while ((len = zis.read(buf)) != -1) { fos.write(buf, 0, len); } zis.closeEntry();// 关闭zip条目 } if (fos != null) fos.close(); zis.close(); } }
相关文章推荐
- Python中zip()函数用法举例
- zip 的压缩原理与实现
- 利用批处理结合winrar轻松压缩文件
- 用vbs实现zip功能的脚本
- PHP执行zip与rar解压缩方法实现代码
- android打开rar压缩文件
- java生成压缩文件示例代码
- Java自动解压文件实例代码
- C#实现解压GZip文件的方法
- MYSQL ZIP免安装版配置步骤及图形化管理工具mysql-workbench
- JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
- Android实现zip文件压缩及解压缩的方法
- Go语言压缩和解压缩tar.gz文件的方法
- php的zip解压缩类pclzip使用示例
- php ZipArchive压缩函数详解实例
- PHP生成压缩文件实例
- php在线解压ZIP文件的方法
- php实现的zip文件内容比较类
- Java创建ZIP压缩文件的方法