java 流压缩_java之IO流:压缩文件

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

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值