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. MongoDB学习之mongoose

    MongoDB介绍: MongoDB是基于Javascript语言的数据库,存储格式是JSON,而Node也是基于JavaScript的环境(库),所以node和mongoDB的搭配能减少因为数据转换 ...

  2. css滤镜模糊效果filter和backdrop-filter

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. android自定义控件——以滑动开关为例

    0.引言 (1)Android从4.0开始提供了switch的滑动开关效果组件,但是之前版本却没有 (2)很多时候我们写程序,都希望把有用的通用的通用的东西封装起来,以便以后重用. 本文根据组件开发思 ...

  4. android,getExternalStorageDirectory()和getExternalFilesDir()的区别

    转载地址:https://blog.csdn.net/nugongahou110/article/details/48154859 之前看到一位网友的吐槽:当我把手机连接到电脑上时,在SD卡根目录看到 ...

  5. 深度语义匹配模型-DSSM 及其变种

    转自:http://ju.outofmemory.cn/entry/316660 感谢分享~ DSSM这篇paper发表在cikm2013,短小但是精炼,值得记录一下 ps:后来跟了几篇dssm的pa ...

  6. 一点一点学写Makefile(2)-自动搜所当前目录下的所有源文件

    上个博客我们使用的是笨方法添加源文件,本次我要实现的是遍历文件夹来获得所有的cpp文件 //makefile CROSS = CC = $(CROSS)gcc CXX = $(CROSS)g++ DE ...

  7. LeetCodeOJ刷题之15-16【3Sum(三数和问题)】

    本文为两个题:[三数和(3Sum)]与[最近三数和(3Sum Closest)]问题 第一部分分析3Sum问题,第二部分分析3Sum Closest问题,由于两个问题的思路很像,所以这里放到一起分析. ...

  8. python:类与对象命名空间、面对对象的组合用法

    1,类里可以定义两种属性: #静态属性 #静态属性就是直接在类中定义的变量 #动态属性 #动态属性就是定义在类中的方法 class Course: language = ['Chinese']#静态属 ...

  9. 【洛谷5283】[十二省联考2019] 异或粽子(可持久化Trie树+堆)

    点此看题面 大致题意: 求前\(k\)大的区间异或和之和. 可持久化\(Trie\)树 之前做过一些可持久化\(Trie\)树题,结果说到底还是主席树. 终于,碰到一道真·可持久化\(Trie\)树的 ...

  10. css实现单行的靠左靠右和居中效果

    1.父元素    text-align:center 2.子元素 .left{ float:left; } .right{ float:right; } .center{ display:inline ...