1) ZIP文档通常以压缩格式存储一个或多个文档。在Java中可以用ZipInputStream读入ZIP文档(即解压文件流),用ZipOutputStream写入ZIP文档(即压缩文件流),无论解压或者压缩都需要创建ZipEntry对象(因为ZipEntry对象是流中必须要用的文件项)。压缩时创建ZipEntry对象,需要传入文件名;解压时创建ZipEntry对象可以调用该对象的getName()获取文件名称,每次ZipEntry项使用完之后需要调用closeEntry(),以便调用getNextEntry()或者putNextEntry()获得下个ZipEntry对象。最后无论解压亦或者是压缩整个过程操作完之后记得调用close关闭流释放资源。ZipInputStream和ZipOutputStream属于java.util.zip包中。

如果压缩的文件是有多级目录的,且解压时需要按照多级目录的要求解压,那么需要先手动创建多级目录,然后在解压文件,否则会报异常(找不到指定的系统路径)

下面是一个压缩和解压的例子

    /**
* 同级文件压缩
*/
public static void zipCompression() { try {
// 文件的根路径
String fileRootPath = "G:\\"; // 已有的两个文件
String[] files = { "1.txt", "2.txt" }; // 创建一个zip文件
File file = Paths.get(fileRootPath, "test.zip").toFile(); // 创建ZipOutputStream 对象
ZipOutputStream zipOutputStream = new ZipOutputStream(
new FileOutputStream(file)); // 多个文件, 同级文件压缩
for (String fileName : files) { ZipEntry zipEntry = new ZipEntry(fileName);
zipOutputStream.putNextEntry(zipEntry); // 读文件
String filePath = fileRootPath + fileName;
FileInputStream fileInputStream = new FileInputStream(filePath);
byte[] b = new byte[1024];
int size = 0;
// 写入压缩文件
while ((size = fileInputStream.read(b)) != -1) {
zipOutputStream.write(b, 0, size);
}
// 关闭 ZipEntry对象
zipOutputStream.closeEntry();
// 关闭文件流
fileInputStream.close();
}
// 关闭ZIP 流
zipOutputStream.close(); } catch (Exception exception) { }
}
    /**
* 同级文件解压
*/
public static void zipDecompression() {
try {
String fileZipName = "G:\\test.zip"; // 创建ZipInputStream 对象
FileInputStream fileInputStream = new FileInputStream(fileZipName);
ZipInputStream zipInputStream = new ZipInputStream(fileInputStream);
ZipEntry zipEntry = null; // 得到ZipEntry项,创建一个文件,将内容写入文件
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
String newFileName = "G:\\" + zipEntry.getName();
FileOutputStream fileOutputStream = new FileOutputStream(
newFileName);
byte[] b = new byte[1024];
int size = 0;
while ((size = zipInputStream.read(b)) != -1) {
fileOutputStream.write(b, 0, size);
} // 关闭文件流
fileOutputStream.close(); // 关闭当前ZipEntry项 调用getNextEntry() 获取下一个ZipEntry项
zipInputStream.closeEntry();
}
zipInputStream.close(); } catch (Exception exception) { } }

I/O流、ZIP文档的更多相关文章

  1. IO流-ZIP文档

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

  2. 笔记:I/O流-ZIP文档

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

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

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

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

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

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

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

  6. JAVA如何解压缩ZIP文档

    代码片段: package org.yu.units; import java.io.Closeable; import java.io.File; import java.io.FileInputS ...

  7. 文档流 css中间float clear和布局

    文档流 先说说什么是公文流转  什么流 它是一系列连续的东西 <div style="background-color:pink;width:40px;height:80px;&quo ...

  8. 文档流 css中的float clear与布局

    文档流 先说说什么是文档流  流是什么 就是一串连续的东西 <div style="background-color:pink;width:40px;height:80px;" ...

  9. WPF中使用流文档

    转载自:http://www.cnblogs.com/zlgcool/archive/2008/11/17/1335456.html WPF面向的是UI展现,而文本显示无疑是UI层中的重要功能之一.W ...

随机推荐

  1. Android 环信聊天头像昵称显示解决方案

    从消息扩展中获取昵称和头像 昵称和头像的获取:把用户基本的昵称和头像的URL放到消息的扩展中,通过消息传递给接收方,当收到一条消息时,则能通过消息的扩展得到发送者的昵称和头像URL,然后保存到本地数据 ...

  2. 解决Tensorflow源码安装的之后TensorBoard 无法使用的问题

    作者  cnblog 修雨轩陈 我是按照 Tensorflow 下 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3 ...

  3. 使用Unicode写文本文件:一个简单类的示例

    参考了http://forums.codeguru.com/showthread.php?457106-Unicode-text-file示例. class WOFSTREAM : public st ...

  4. Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

    严重: StandardWrapper.Throwableorg.springframework.beans.factory.BeanCreationException: Error creating ...

  5. MyISAM引擎表出现“Error 'Incorrect key file for table”

    mysql主从复制中的从库突然出现了警报,sql_thread停止了,show slave status\G;查看 mysql> show slave status\G ; . row **** ...

  6. Windows漏洞利用技术概述

    Windows漏洞利用技术总结 1. 前言 本文是我对漏洞利用技术的学习总结,也是自己践行QAD (Questions.Answer.Discussions)的一次实践.本文通过阅读几位大牛的文章.演 ...

  7. 1.GlusterFS 初识

    一. GlusterFS 初始 1.1 分布式文件系统出现 计算机通过文件系统管理.存储数据,而现在数据信息爆炸的时代中人们可以获取的数据成指数倍的增长,单纯通过增加硬盘个数来扩展计算机文件系统的存储 ...

  8. 一、Python安装下载

    下载地址:https://www.python.org/downloads/ 因为Python3.X和2.X有部分不兼容,有些不向下兼容,现在3.5的资料和插件少,故我就学习的2.7.11了; 下载后 ...

  9. LA 4043 最优匹配

    题目链接:https://vjudge.net/contest/161820#problem/A 题意: n 个 白点,n 个黑点,给出了坐标,求完美匹配后,各点不相交,输出白点对于的黑点编号:(输出 ...

  10. 【[COCI2011-2012#5] POPLOCAVANJE】

    据说这道题卡空间? 不存在的,拿\(AC\)自动机去存\(5000\times5000\)的串肯定是要M的 我们可以考虑对长度为\(n\)的串建一个\(SAM\),这样空间就只需要两倍的\(3e5\) ...