博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(四) ZIP文档
阅读量:4047 次
发布时间:2019-05-25

本文共 2409 字,大约阅读时间需要 8 分钟。

ZIP文档(通常)以压缩格式存储了一个或多个文件,每个ZIP文档都有一个包含诸如文件名字和使用的压缩方法等信息的头。

(1)使用ZIPInputStream来读入ZIP,通过getNextEntry方法返回一个描述这些项的ZipEntry类型的对象。
ZIPInputStream的read方法被修改为在碰到当前项的结尾时返回 -1 ,必须通过调用closeEntry来读下一项。
e.g.通读ZIP文件的代码序列 ZipInputStream zin = new ZipInputStream(new FileInputStream(zipFile));

ZipEntry entry = null;     while((entry=zin.getNextEntry()) != null){         ... ...         zin.closeEntry();     }     zin.close();

 

(2)可以不使用原生的read方法,通常会使用某个更能胜任的流过滤器的方法。

e.g.读ZIP文件内部的一个文本文件

ZipInputStream zin = new ZipInputStream(new FileInputStream(zipFile));     ZipEntry entry = null;     Scanner in = null;     while((entry=zin.getNextEntry()) != null){         in = new Scanner(zin);         while(in.hasNextLine()){             System.out.println(in.nextLine());         }         zin.closeEntry();     }     in.close();
 

注意:如果压缩文件被损坏会抛出ZipException

(3)写出到ZIP文件,可以使用ZipOutputStream
对于ZIP中每一项都应创建一个ZipEntry对象,并将文件名传递给ZipEntry的构造器,它将设置文件日期和解压方法等参数。如果需要也可以覆盖这些设置。
然后调用ZipOutputStream的putNextEntry方法来开始写新文件,并将文件数据发送到ZIP流中。完成后调用closeEntry。

private static void testZIP() {           try{               File fromFile1 = new File(System.getProperty("user.dir")+"\\Notes\\流\\zip\\1.txt");               File fromFile2 = new File(System.getProperty("user.dir")+"\\Notes\\流\\zip\\2.txt");                              DataInputStream in1 = new DataInputStream(new BufferedInputStream(new FileInputStream(fromFile1)));               DataInputStream in2 = new DataInputStream(new FileInputStream(fromFile2));                              File toFile = new File(System.getProperty("user.dir")+"\\Notes\\流\\zip\\result.zip");               ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(toFile)));                              ZipEntry ze = new ZipEntry(fromFile1.getName());               zipOut.putNextEntry(ze);               int bytes = -1;               while((bytes=in1.read())!=-1){                   zipOut.write(bytes);               }               in1.close();               zipOut.closeEntry();                              ze = new ZipEntry(fromFile2.getName());               zipOut.putNextEntry(ze);               while((bytes=in2.read())!=-1){                   zipOut.write(bytes);               }               in2.close();               zipOut.closeEntry();               zipOut.close();           }catch(Exception e){               e.printStackTrace();           }       }
 

 

转载地址:http://wayci.baihongyu.com/

你可能感兴趣的文章
为什么很多程序员都选择跳槽?
查看>>
mongdb介绍
查看>>
mongdb在java中的应用
查看>>
区块链技术让Yotta企业云盘为行政事业服务助力
查看>>
Yotta企业云盘更好的为媒体广告业服务
查看>>
Yotta企业云盘助力旅游行业新发展
查看>>
Yotta企业云盘助力科技行业创高峰
查看>>
Yotta企业云盘更好地为教育行业服务
查看>>
Yotta企业云盘怎么帮助到能源化工行业
查看>>
企业云盘如何助力商业新发展
查看>>
医疗行业运用企业云盘可以带来什么样的提升
查看>>
教育数字智能化能为现有体系带来新的起点
查看>>
媒体广告业如何将内容资产进行高效地综合管理与利用
查看>>
能源化工要怎么管控核心数据
查看>>
媒体广告业如何运用云盘提升效率
查看>>
企业如何运用企业云盘进行数字化转型-实现新发展
查看>>
司法如何运用电子智能化加快现代化建设
查看>>
iSecret 1.1 正在审核中
查看>>
IOS开发的开源库
查看>>
IOS开发的开源库
查看>>