在java的学习中,IO流是一个避不开的话题。在java日常的学习和使用中,为了给不同的场景提供不同的用途,IO流拥有一个庞大的方法集合。虽然给使用者提供了极大的便利,但此同时也带来了学习时的异常冗杂和使用时候的选择过多,相信各位初学者在看到IO流多如牛毛的方法时,也会像我一样头皮一麻,心里那句 "***"即将脱口而出!
而今天要介绍的"ZipInputStream"和"ZipOutputStream"应该是属于IO流中的落后生了。君不见,在互联网上诸多的java学习教程中都不见这位同学的身影。相比于IO流中的同班同学们,因为不被老师看好所以经常被人们忽略。而“人如其名”,这位名为 "zip"的同学致力于文件的压缩或解压。今天我就来和这位同学进行一次粗浅的学习问卷,诸君且看:
Q:首先简单介绍一下你自己吧。
A:大家好,我来自java中一个叫“java.util.zip"的包,继承与字节流类OutputSteam 和 InputStream。看到这两个熟悉的名字大家肯定就知道我有一堆的兄弟姐妹了,但是我跟他们都不熟,和我比较玩得来的一个叫“GZIPOutputStream”和“GZIPInputStream”,因为我们功能相近,干的活儿都是压缩文件。因为这个职业原因,大家都不太用java压缩文件吧,所以一直不被看好,介绍我使用我的地方也很少,只能在角落偷偷发光。
Q:给你一个展示自己的机会,来说说你是怎么压缩一个文件的吧。
A:要压缩一个文件,我一般分四步走:
1. 生成一个压缩类对象,这个对象来自于一个".zip"的文件,通过它产生一个ZipOutputStream对象。
ZipOutputStream out=new ZipOutputStream(new BufferedOutputStream(new FileOutputStream("compress.zip")));
2. 生成压缩对象入口,因为需要被压缩的文件不止一个。需要用ZipEntry方法生成压缩入口文件后才能放进压缩文件。
ZipEntry zipentry = new ZipEntry(String Filename);//Filename为被压缩文件
3. 用putNextEntry将压缩入口放入压缩文件,这样之后才算完成准备工作。
out.putNextEntry(new ZipEntry);
4. 万事俱备之后就可以顺利的将文件内容写入了。out.write()
最后不要忘记养成好习惯将压缩入口和文件流关闭。
Q:那你是如何解压一个".zip"文件的呢
A:也很简单,先用getZipEntry()得到ZipEntry对象,然后就可以直接读取了。
Q:嗯,看来你虽然个头不大,却也能四两拨千斤,在文件压缩上面能起到很关键的作用。希望有朝一日大家能发现你的能量。发挥更好的作用。
最后给大家分享一下具体的代码:
package IOFile;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class FileCompress {
public static void main(String args[]) throws IOException{
FileOutputStream a = new FileOutputStream("compress.zip");
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(a));
File_Compress(out);
FileInputStream d = new FileInputStream("compress.zip");
ZipInputStream in = new ZipInputStream(new BufferedInputStream(d));
File_Decompress(in);
}
//压缩三个文件
public static void File_Compress(ZipOutputStream out ) throws IOException {
String str[] ={"fileread.java",
"filesum.java",
"filewrite.java"};
for(int i=0; i
System.out.println("Writing File:"+str[i]);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(str[i]));
out.putNextEntry(new ZipEntry(str[i]));
int b;
while((b=in.read())!=-1)out.write(b);
in.close();
}
out.close();
}
//解压文件并打印
public static void File_Decompress(ZipInputStream in) throws IOException {
System.out.println("Reading Files.");
ZipEntry z;
while((z=in.getNextEntry())!=null) {
System.out.println("Reading file"+z.getName());
int x ;
while((x=in.read())!=-1)System.out.write(x);
System.out.println();
}
in.close();
}
}