压缩流
2016-03-15 15:31
489 查看
ZIP是一种较为常见的压缩形式,在Java中要实现ZIP的压缩需要导入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream和ZipEntry几个类完成操作。
<1>ZipFile类
压缩一个文件
压缩一个文件夹
<2>ZipInputStream类
ZipInputStream是InputStream的子类,通过此类可以方便地读取ZIP格式的压缩文件
<1>ZipFile类
压缩一个文件
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; //================================================= // File Name : ZipOutputStream_demo //------------------------------------------------------------------------------ // Author : Common //主类 //Function : ZipOutputStream_demo; public class ZipOutputStream_demo { public static void main(String[] args) throws Exception{ // TODO 自动生成的方法存根 File file = new File("/home/common/software/coding/HelloWord/HelloWord/order.txt");//路径 File zipfile = new File("/home/common/software/coding/HelloWord/HelloWord/order.zip");//路径 InputStream input = new FileInputStream(file); //定义输入文件流 ZipOutputStream zipout = null; //定义压缩输出流 //实例化压缩输出流对象,并指定压缩文件的输出路径 zipout = new ZipOutputStream(new FileOutputStream(zipfile)); //每一个被压缩的文件都用ZipEntry表示,需要为每一个压缩后的文件设置名称 zipout.putNextEntry(new ZipEntry(file.getName())); //创建ZipEntry zipout.setComment("这是压缩后的文件"); //设置注释 int temp = 0; //接收输入的数据 while((temp = input.read()) != -1){ //读取内容,采用了边读边写的方式 zipout.write(temp); //压缩输出内容 } input.close(); zipout.close(); } }
压缩一个文件夹
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; //================================================= // File Name : ZipOutputStream_demo //------------------------------------------------------------------------------ // Author : Common //主类 //Function : ZipOutputStream_demo; public class ZipOutputStream_demo { public static void main(String[] args) throws Exception{ // TODO 自动生成的方法存根 // File file = new File("/home/common/software/coding/HelloWord/HelloWord/order.txt");//路径 // File zipfile = new File("/home/common/software/coding/HelloWord/HelloWord/order.zip");//路径 // // InputStream input = new FileInputStream(file); //定义输入文件流 // ZipOutputStream zipout = null; //定义压缩输出流 // //实例化压缩输出流对象,并指定压缩文件的输出路径 // zipout = new ZipOutputStream(new FileOutputStream(zipfile)); // //每一个被压缩的文件都用ZipEntry表示,需要为每一个压缩后的文件设置名称 // zipout.putNextEntry(new ZipEntry(file.getName())); //创建ZipEntry // zipout.setComment("这是压缩后的文件"); //设置注释 // int temp = 0; //接收输入的数据 // while((temp = input.read()) != -1){ //读取内容,采用了边读边写的方式 // zipout.write(temp); //压缩输出内容 // } // input.close(); // zipout.close(); File file = new File("/home/common/software/coding/HelloWord/HelloWord/test");//路径 File zipfile = new File("/home/common/software/coding/HelloWord/HelloWord/order.zip");//路径 InputStream input = null; //定义输入文件流 ZipOutputStream zipout = null; //定义压缩输出流 //实例化压缩输出流对象,并指定压缩文件的输出路径 zipout = new ZipOutputStream(new FileOutputStream(zipfile)); zipout.setComment("这是压缩后的文件"); //设置注释 if(file.isDirectory()){ //判断是否是目录 File lists[] = file.listFiles(); //列出全部文件 for(int i=0;i<lists.length;i++){ input = new FileInputStream(lists[i]); //设置文件输入流 //每一个被压缩的文件都用ZipEntry表示,需要为每一个压缩后的文件设置名称 zipout.putNextEntry(new ZipEntry(file.getName()+File.separator+lists[i].getName())); //创建ZipEntry int temp = 0; while((temp = input.read()) != -1){ zipout.write(temp); } input.close(); } } zipout.close(); } }
import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; //================================================= // File Name : ZipFile_demo //------------------------------------------------------------------------------ // Author : Common //主类 //Function : ZipFile_demo; public class ZipFile_demo { public static void main(String[] args) throws Exception{ // TODO 自动生成的方法存根 File file = new File("/home/common/software/coding/HelloWord/HelloWord/b.zip");//路径 File outputfile = new File("/home/common/software/coding/HelloWord/HelloWord/b1.txt");//解压缩文件名称 ZipFile zipfile = new ZipFile(file); //实例化ZipFile对象 // System.out.println("压缩文件的名称:"+zipfile.getName()); //得到压缩文件的名称 ZipEntry entry = zipfile.getEntry("b2.txt"); //得到一个压缩实体 InputStream input = zipfile.getInputStream(entry); //取得ZipEntry输入流 OutputStream out = new FileOutputStream(outputfile); //取得ZipEntry输入流 int temp = 0; //保存接收数据 while((temp = input.read()) != -1){ out.write(temp); } input.close(); out.close(); } }
<2>ZipInputStream类
ZipInputStream是InputStream的子类,通过此类可以方便地读取ZIP格式的压缩文件
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; //================================================= // File Name : ZipInputStream_demo //------------------------------------------------------------------------------ // Author : Common //主类 //Function : ZipInputStream_demo; public class ZipInputStream_demo { public static void main(String[] args) throws Exception { // TODO 自动生成的方法存根 File file = new File("/home/common/software/coding/HelloWord/HelloWord/HelloWord.zip");//路径 File outfile = null; //定义输出的文件对象 ZipFile zipfile = new ZipFile(file); //实例化ZipFile对象 ZipInputStream zipinput = new ZipInputStream(new FileInputStream(file)); //实例化ZIP输入流 ZipEntry entry = null; //定义一个ZipEntry对象,用于接收压缩文件中的每一个实体 InputStream input = null; //定义输入流,用于读取每一个ZipEntry OutputStream out = null; //定义输出流,用于输出每一个实体内容 while((entry = zipinput.getNextEntry()) != null){ //得到每一个ZipEntry System.out.println("解压缩"+entry.getName()+"文件"); outfile = new File("/home/common/software/coding/HelloWord/HelloWord"+entry.getName()); if(!outfile.getParentFile().exists()){ //判断文件夹是否存在 outfile.getParentFile().mkdirs(); } if(!outfile.exists()){ //判断文件是否存在 outfile.createNewFile(); } input = zipfile.getInputStream(entry); //得到压缩实体的输入流 out = new FileOutputStream(outfile); //实例化输入流对象 int temp = 0; while((temp = input.read()) != -1){ out.write(temp); } input.close(); out.close(); } } }
相关文章推荐
- 一篇关于交叉编译的文章
- uBLAS——Boost 线性代数基础程序库 (二)
- 《遇》
- 一个SQL中有2个聚合函数
- Linux修改Shell命令提示符及颜色
- Android App 性能优化实践
- java jacob office转换成pdf
- python 版本问题,导致ansible提示报错
- 瀑布流函数
- makefile中的自动化变量 【转】
- [JavaEE笔记]Cookie
- Swift 2.0 UItableView 的简单使用
- Java并发编程:进程和线程的由来(转)
- Spring,hibernate,struts的面试笔试题及答案
- JS获取某年某月的最后一天
- PHp服务器环境搭建
- 《小怨念》
- 原地归并排序
- java的面试题
- 常用 Git 命令清单