java保存多个文件夹_Java中的Zip进行多文件的保存

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);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值