java使用ZipOutputStream文件进行压缩

网友投稿 1449 2022-05-30

目录

java使用ZipOutputStream对文件进行压缩

Java处理文件压缩的类

ZipOutStream压缩文件

1.putNextEntry(new ZipEntry(""))

2.write()

java处理文件压缩的类

java中常用ZipOutStream进行文件的压缩,用ZipInputStream对文件进行解压,zip相对于其他的文件的io稍有一点点不同的就是:它的内部就是一个小型的文件系统。如果是一个文件夹所有文件都是文档二不是文件夹。那还好办直接操作。如果涉及到文件夹和文档的不固定分布。那就需要仔细考虑下。这里用递归进行遍历。

ZipOutStream压缩文件

主要两个方法:

这里面重要的就是ZipEntry这个概念首先要懂。ZipEntry是zip下面的文件条目,你可以比作外面系统的File类似。后面的参数就是在zip目录下的相对位置。所以这里有一点比较重要的就是当你遍历文件夹的时候你的ZipEntry的参数的改变规律。写不好的话会使整个文件目录混乱(如果文件层级较低那就不碍事)。而putNextEntry(ZipEntry z)的意思就是我下面io操作(写入)都是在z这个文件条目下进行的。

这个zipoutputstream流和其他的output流不一样的地方就是BufferedOutputStream不能嵌套它。也就是它不能套缓存流用。

对于文件夹下包含文件夹需要特殊考虑。判断它是不是文件夹。文件夹的话要遍历他的子节点文件。用递归思想。已在代码中给出注释。还有文件要注意相对绝对路径。

贴上我的模板代码:

import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class test1 { public static void main(String[] args) throws IOException { String filepath="F:\\fileget\\二班";//目标文件夹 String zipname="F:\\fileget\\二班软工作业.zip";//目标输出路径 filetozip(filepath,zipname); } public static void filetozip(String filepath,String zipname) throws IOException { File file=new File(filepath); OutputStream outputStream=new FileOutputStream(zipname); ZipOutputStream zipout=new ZipOutputStream(outputStream); //递归函数 三个参数分别代表 1:当前zipout流 2:当前文件/文件夹 3:在zip下的path dozip(zipout,file,""); zipout.finish(); zipout.close(); outputStream.close(); } private static void dozip(ZipOutputStream zipout, File file, String addpath) throws IOException { if(file.isDirectory()) { File f[]=file.listFiles(); for(int i=0;i

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

另外,解压的那个类后面有时间会补充下来。

如果对后端、爬虫、数据结构算法等感性趣欢迎关注我的个人公众号交流:bigsai

Java

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【华为云社区19年 12月刊】本期推荐:华为云文字识别服务产品优势、应用场景、典型案例和未来之路
下一篇:分享几个开源Java写的博客系统
相关文章