ZIP文档以压缩格式存储了一个或多个文件,每个ZIP文档都有一个头,包含诸如每个文件名字和所使用的压缩方法等信息,在
Java
中可以使用
ZipInputStream
来读入ZIP
文档,getNextEntry
方法返回一个描述这些项的
ZipEntry
类型的对象,ZipInputStream

read
方法被修改为在碰到当前项的结尾时返回
-1,然后必须调用
closeEntry
来读入下一个项,示例代码如下:

                ZipInputStream inputStream = null;

                try {

                        inputStream = new
ZipInputStream(new
FileInputStream("x64.zip"));

                        ZipEntry entry = null;

                        while ((entry = inputStream.getNextEntry()) != null) {

// 将每个项的内容单独保存为文件

                                saveFile(entry.getName(), inputStream);

                                inputStream.closeEntry();

                        }

                } catch (FileNotFoundException ex) {

                        ex.printStackTrace();

                } finally {

                        if (inputStream != null) {

                                inputStream.close();

                        }

                }

要写入到ZIP文件,可以使用ZipOutputStream类,对于希望放入到ZIP文件中的项,都应该创建一个ZipEntry对象,并将文件名称传递给ZipEntry构造函数,并设置默认的日期、解压缩参数等,然后调用
putNextEntry
方法增加项,并向流中写入内容,最后调用
closeEntry
来关闭项,示例代码如下:

         
 // 将多个文件增加到压缩文件中

                ZipOutputStream outputStream = null;

                String[] fileNames = new String[]{"PrintWriter.log", "filestream.dat",".idea\\compiler.xml"};

                try {

                        outputStream = new
ZipOutputStream(new
FileOutputStream("zipStreamApp.zip"));

                        for (String fileName : fileNames) {

                                ZipEntry entry = new
ZipEntry(fileName);

                                outputStream.putNextEntry(entry);

                                byte[] fileBytes = readFile(fileName);

                                outputStream.write(fileBytes);

                                outputStream.closeEntry();

                        }

                }

                finally {

                        if(outputStream != null){

                                outputStream.close();

                        }

                }

 
 

 
 

笔记:I/O流-ZIP文档的更多相关文章

  1. IO流-ZIP文档

    java中通常使用ZipInputStream来读ZIP文档 ZIP文档(通常)以压缩格式存储了一个或多个文件,每个ZIP文档都有一个包含诸如文件 名字和所使用的压缩方法等信息的头.在Java中,可以 ...

  2. I/O流、ZIP文档

    1) ZIP文档通常以压缩格式存储一个或多个文档.在Java中可以用ZipInputStream读入ZIP文档(即解压文件流),用ZipOutputStream写入ZIP文档(即压缩文件流),无论解压 ...

  3. 【.NET深呼吸】Zip文件操作(2):动态生成Zip文档

    通过前面一篇烂文的介绍,大伙儿知道,ZipArchive类表示一个zip文档实例,除了用上一篇文章中所列的方法来读写zip文件外,还可以直接通过ZipArchive类,动态生成zip文件. 文件流操作 ...

  4. 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档

    .net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...

  5. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档

    问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...

  6. HTML+CSS基础 块级元素div分析 文档流 脱离文档流的方法

    块级元素div分析 1.外边距  margin 2.内边距 padding 3.边框  border Div的真实宽度=width+margin-left+margin-right+border*2+ ...

  7. JavaSE学习笔记02运算符、帮助文档生成与Scanner输入

    1. 运算符 1. 算术运算符:+,-,*,/,%,++,-- //二元运算符 int a = 10; int b = 20; int c = 25; int d = 25; System.out.p ...

  8. MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系

    MongoDB的集合(collection)可以看做关系型数据库的表,文档对象(document)可以看做关系型数据库的一条记录.但两者并不完全对等.表的结构是固定的,MongoDB集合并没有这个约束 ...

  9. mongodb笔记(一) 分片 &&文档连接

    版本:mongodb3.4 ; 分片: 工作顺序:router=>config=>shards 一,配置config: 3.4中config必须为replSet.下面配置两个config. ...

随机推荐

  1. shell 批量创建带随机字符串的html文件

    思路一: echo $RANDOM|md5sum |tr "[0-9]" "[a-j]"|cut -c 2-11 RANDOM:  linux内置的随机数变量 ...

  2. 分布式mysql中间件(mycat)

    1.   MyCAT概述 1.1 背景 随着传统的数据库技术日趋成熟.计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上.这时集中式数据库系统表现出它的不足: (1)集中 ...

  3. BIOS简介

    BIOS简介: BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统".其实,它是一组固化到计 ...

  4. zTree实现地市县三级级联报错(二)

    zTree实现地市县三级级联 1.具体报错如下 2014-05-10 23:29:13 [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolT ...

  5. Openstack_O版(otaka)部署_网络服务Neutron部署

    控制节点配置 1. 建库建用户 CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO '; GRANT ALL PRIVILEGE ...

  6. java并发:Synchronized 原理

    1.同步代码块: 反编译结果: monitorenter : 每个对象有一个监视器锁(monitor).当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取moni ...

  7. Radar Installation POJ - 1328

    Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...

  8. iOS - Mac 常用快捷键

    前言 可以按下组合键来实现通常需要鼠标.触控板或其他输入设备才能完成的操作. 要使用键盘快捷键,需按住一个或多个修饰键,同时按快捷键的最后一个键.例如,要使用快捷键 Command-C(拷贝),请按住 ...

  9. java暴力递归回溯算法

    今天这个问题是我之前一直想解决的,还记得以前第一次上蓝桥杯的课的时候,也就是大一高数期中模拟考试那天,下午去上蓝桥杯课,遇到这道题,当时写了写,根本没有思路,然后就给大一的模拟考试去了.印象深刻啊,一 ...

  10. 【BZOJ1008】【HNOI2008】越狱(组合数学)

    题面 题目描述 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 输入输出格式 ...