- Java对Zip格式类库支持得比较全面,得用它可以把多个文件压缩成一个压缩包。这个类库使用的是标准Zip格式,所以能与很多的压缩工具兼容。
ZipOutputStream类有设置压缩方法以及在压缩方式下使用的压缩级别,zipOutputStream.setMethod(int method)设置用于条目的默认压缩方法。只要没有为单个 ZIP 文件条目指定压缩方法,就使用ZipOutputStream所设置的压缩方法来存储,默认值为 ZipOutputStream.DEFLATED(表示进行压缩存储),还可以设置成STORED(表示仅打包归档存储)。ZipOutputStream在设置了压缩方法为DEFLATED后,我们还可以进一步使用setLevel(int level)方法来设置压缩级别,压缩级别值为0-9共10个级别(值越大,表示压缩越利害),默认为Deflater.DEFAULT_COMPRESSION=-1。当然我们也可以通过条目ZipEntry的setMethod方法为单个条件设置压缩方法。
类ZipEntry描述了存储在ZIP文件中的压缩文件。类中包含有多种方法可以用来设置和获得ZIP条目的信息。类ZipEntry是被ZipFile[zipFile.getInputStream(ZipEntry entry)]和ZipInputStream使用来读取ZIP文件,ZipOutputStream来写入ZIP文件的。有以下这些有用的方法:getName()返回条目名称、isDirectory()如果为目录条目,则返回 true(目录条目定义为其名称以 '/' 结尾的条目)、setMethod(int method) 设置条目的压缩方法,可以为 ZipOutputStream.STORED 或 ZipOutputStream .DEFLATED。
- 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;
- /**
- *
- * 用Zip保存多个文件.
- *
- */
- public class ZipCompress {
- private static final String FILE = "d:\\test.zip";
- public static void main(String[] args) throws Exception {
- //建立一个文件输出流
- FileOutputStream file = new FileOutputStream(FILE);
- //建立一个CheckSum输出流,Adler32 CheckSum类型校验和
- CheckedOutputStream csum = new CheckedOutputStream(file, new Adler32());
- //zip输出流
- ZipOutputStream zos = new ZipOutputStream(csum);
- //使用缓冲输出流包装,提升性能
- BufferedOutputStream out = new BufferedOutputStream(zos);
- //注释
- zos.setComment("A test of Java Zipping");
- for(String s : args){
- System.out.println("Writing file " + s);
- //读文件
- BufferedReader in = new BufferedReader(new FileReader(s));
- zos.putNextEntry(new ZipEntry(s));
- 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 in = new FileInputStream(FILE);
- CheckedInputStream csumi = new CheckedInputStream(in, new Adler32());
- ZipInputStream zin = new ZipInputStream(csumi);
- BufferedInputStream bis = new BufferedInputStream(zin);
- ZipEntry ze;
- while((ze = zin.getNextEntry()) != null){
- System.out.println("Reading file " + ze);
- int x;
- while((x = bis.read()) != -1){
- System.out.write(x);
- }
- }
- if(args.length == 1){
- System.out.println("Checksum: " + csumi.getChecksum().getValue());
- }
- bis.close();
- ZipFile zf = new ZipFile(FILE);
- @SuppressWarnings("rawtypes")
- Enumeration e = zf.entries();
- while(e.hasMoreElements()){
- ZipEntry ze2 = (ZipEntry)e.nextElement();
- System.out.println("File: " + ze2);
- }
- zf.close();
- }
- }
java 保存多个文件
最新推荐文章于 2022-04-25 23:21:26 发布