博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的Zip进行多文件的保存
阅读量:4091 次
发布时间:2019-05-25

本文共 3600 字,大约阅读时间需要 12 分钟。

package zipDemo;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.util.Enumeration;import java.util.zip.Adler32;import java.util.zip.CheckedInputStream;import java.util.zip.CheckedOutputStream;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;/** * 用Java中的Zip进行多文件的保存练习 * @author 於之 * */public class Zip {	 public static void main(String[] args) throws Exception{		 	/**		 	 * 压缩多个文件(zip可以压缩任何文件,包括二进制文件)		 	 * 将多个文件压缩到同一个压缩文件中		 	 */	        args = new String[3];  	        args[0] = "d:/file/a.txt";  	        args[1] = "d:/file/b.txt";  	        args[2] = "d:/file/c.txt";  	        	        /**	         * 压缩文件存放的路径以及名称	         */	        FileOutputStream f = new FileOutputStream("d:/file/abc.zip");  	        	        /**	         * 作用是为任何OutputStream产生校验和	         * 第一个参数是制定产生校验和的输出流,第二个参数是指定Checksum的类型 (Adler32(较快)和CRC32两种)	         */	        CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32());  	        /**	         * 用于将数据压缩成Zip文件格式	         */	        ZipOutputStream zos = new ZipOutputStream(csum);  	        BufferedOutputStream out = new BufferedOutputStream(zos);  	        zos.setComment("A test of Java Zipping");  //添加注释	        int i=1;	        for(String arg : args){//一次对需要压缩的文件依次操作	            System.out.println("writing file: "+arg);  	            BufferedReader in = new BufferedReader(new FileReader(arg));  	            /**	             * 对于每一个要被存放到压缩包的文件,都必须调用ZipOutputStream对象的putNextEntry()方法	             * 参数是一个 ZipEntry(String arg)对象,arg表示文件的路径,可以直接使用被压缩文件的路径作为压缩包中	             * 		文件的路径,也可以自己重新定义每个文件在压缩包中的路径	             * 	             * ZipEntry只有CRC校验和类型	             */	            	            zos.putNextEntry(new ZipEntry("file/"+i+".txt"));  //同一个压缩包中文件名不能一样	            i++;	            int c;  	            while((c=in.read())!=-1){  	                out.write(c);  	            }  	            in.close();  	            out.flush();  	        }  	        out.close();  	        //压缩操作完成	        //。。。。。。。。。。。。。。。。。。。。。。	       System.out.println("CheckSum: "+csum.getChecksum().getValue());	       	       	       	       	       /**	        * 解压压缩文件第一种方法	        */	        System.out.println("Reading file");  	        FileInputStream fi = new FileInputStream("d:/file/abc.zip");  	        CheckedInputStream csumi = new CheckedInputStream(fi, new Adler32());  	        ZipInputStream in2 = new ZipInputStream(csumi);  	        BufferedInputStream bis = new BufferedInputStream(in2);  	        /**	         * 从ZipInputStream中获取NextEntry对象  	         */	        //ZipEntry ze=in2.getNextEntry();   如果在循环外面获取NextEntry,那么只会执行一次,本例中ze永远等于file/1.txt	        ZipEntry ze;	        while((ze=in2.getNextEntry())!=null){  	            System.out.println("Reading file "+ze);  	            int x;  	            byte[] car=new byte[1024];	            while((x=bis.read())!=-1){  	                System.out.write(x);  //将文件读取的内容打印到控制台	            }  	        }  	        if(args.length==1)System.out.println("Checksum: "+csumi.getChecksum().getValue());  	        bis.close();  	        /**	         * 解压文件的第二种方法  直接使用ZipFile对象	         */	        ZipFile zf = new ZipFile("d:/file/abc.zip");  	        Enumeration e = zf.entries();	        while(e.hasMoreElements()){  	            ZipEntry ze2 = (ZipEntry) e.nextElement();  	            System.out.println("File:ZipEntry: "+ze2);  	        } 	    }  }

转载地址:http://iscii.baihongyu.com/

你可能感兴趣的文章
MODULE_DEVICE_TABLE的理解
查看>>
No devices detected. Fatal server error: no screens found
查看>>
db db2_monitorTool IBM Rational Performace Tester
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
swift中单例的创建及销毁
查看>>
获取App Store中App的ipa包
查看>>
UIImage存为本地文件与UIImage转换为NSData
查看>>
[转]打印质数的各种算法
查看>>
[转]javascript with延伸的作用域是只读的吗?
查看>>
php的autoload与global
查看>>
IE不支持option的display:none属性
查看>>
[分享]mysql内置用于字符串型ip地址和整数型ip地址转换函数
查看>>
Https加密及攻防
查看>>
Java生成随机不重复推广码邀请码
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>
【泛型】一个简易的对象间转换的工具类(DO转VO)
查看>>
1.随机函数,计算机运行的基石
查看>>
MouseEvent的e.stageX是Number型,可见as3作者的考虑
查看>>