最近有个需求,要接受上穿的zip文件,解压后读取里面的文件(应该还有目录),提前储备一下需要的知识。

贴在博客上,有需要的可以参考。

ZipInputStream解压文件:

@Test
public void test() {
String fileName = "/attach/01.zip";
String dest = "/attach/22";
try {
getFileInZip(fileName, dest);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private void getFileInZip(String fileName, String dest) throws IOException {

File file = new File(fileName);
ZipInputStream zis = new ZipInputStream(new FileInputStream(file));
OutputStream out = null;
ZipEntry zipEntry = null;
while ((zipEntry = zis.getNextEntry()) != null) {
File temp = new File(dest + File.separator + zipEntry.getName());
if (zipEntry.isDirectory()) {
temp.mkdirs();
continue;
}
System.out.println(zipEntry.getName() + "---" + zipEntry.getSize());
out = new FileOutputStream(temp);
int len = 0;
byte[] bytes = new byte[1024];
while ((len = zis.read(bytes)) != -1) {
out.write(bytes, 0, len);
}
out.close();
zis.closeEntry();
}
zis.close();
}

ZipFile解压文件:

@Test
public void test2() {
String fileName = "/attach/01.zip";
String dest = "/attach/22";
try {
testZipFile(fileName, dest);
} catch (ZipException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private void testZipFile(String fileName, String dest) throws ZipException, IOException {
File file = new File(fileName);
ZipFile zipFile = new ZipFile(file);
Enumeration entries = zipFile.entries();
InputStream inputStream = null;
while (entries.hasMoreElements()) {

ZipEntry zipEntry = (ZipEntry) entries.nextElement();
File temp = new File(dest + File.separator + zipEntry.getName());
if (zipEntry.isDirectory()) {
temp.mkdirs();
continue;
}
inputStream = zipFile.getInputStream(zipEntry);

System.out.println(zipEntry.getName() + "---" + zipEntry.getSize());

if (!temp.getParentFile().exists()) {
temp.getParentFile().mkdirs();

}
FileOutputStream outputStream = new FileOutputStream(temp);
int len = 0;
byte bytes[] = new byte[1024];
while ((len = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, len);
}
outputStream.close();
}

}

注:关于路径的说明,可能有的朋友会以为"/attach/01.zip”是linux或是unix里的路径,

  其实是windows里的路径(linux或unix里的路径就是这样的),我的eclipse是放在D盘的,

  使用"/attach/01.zip"会直接定位到“D:\\attach\\01.zip”

  windows的路径分隔符是 “\”,在java中是“\”是转义字符,所以需要写成"\\"

  linux的路径分隔符是 “/”,就不需要转义了

  当然在windows中使用相对路径时,是可以用“/”作为分隔符的,如:"/attach/01.zip”

ZipFile和ZipInputSteam解压zip文件的更多相关文章

  1. python用zipfile模块打包文件或是目录、解压zip文件实例

    #!/usr/bin/env python # -*- coding: utf-8 -*- from zipfile import * import zipfile #解压zip文件 def unzi ...

  2. Android 解压zip文件(支持中文)

    过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...

  3. (转载)C#压缩解压zip 文件

    转载之: C#压缩解压zip 文件 - 大气象 - 博客园http://www.cnblogs.com/greatverve/archive/2011/12/27/csharp-zip.html C# ...

  4. Android 解压zip文件你知道多少?

    对于Android常用的压缩格式ZIP,你了解多少? Android的有两种解压ZIP的方法,你知道吗? ZipFile和ZipInputStream的解压效率,你对比过吗? 带着以上问题,现在就开始 ...

  5. java实现解压zip文件,(亲测可用)!!!!!!

    项目结构: Util.java内容: package com.cfets.demo; import java.io.File; import java.io.FileOutputStream; imp ...

  6. Android 解压zip文件

    过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...

  7. Java 上传解压zip文件,并且解析文件里面的excel和图片

    需求:上传一个zip文件,zip文件里面包含一个excel和很多图片,需要把excel里面的信息解析出来保存到表中,同时图片也转化成base64保存到数据库表中. PS:为了方便不同水平的开发人员阅读 ...

  8. 通过javascript在网页端解压zip文件并查看压缩包内容

    WEB前端解压ZIP压缩包 web前端解压zip文件有什么用: 只考虑标准浏览器的话, 服务器只要传输压缩包到客户端, 节约了带宽, 而且节约了传输时间, 听起来好像很厉害的说:     如果前端的代 ...

  9. AIX解压ZIP文件

    AIX系统自身是没有解压ZIP文件的,但在AIX安装oracle数据库服务器的话,在$ORACLE_HOME/bin路径下方却有unzip命令,可以解压ZIP文件. 一.shell脚本   之前的版本 ...

随机推荐

  1. Android Studio中有没有类似于Eclipse中的ctrl+2+L的快捷键? \Android Studio快捷键之代码提示

    问:Android Studio中有没有类似于Eclipse中的ctrl+2+L的快捷键? 答:有,as中的快捷键是Ctrl+Alt+V AndroidStudio和Eclipse常用快捷键对比 功能 ...

  2. VC6.0 调试.dll文件

    对于自己制作的.DLL文件,一直没有比较好的调试方法,其实是知道的太少. 下面就说说VC6.0下面 怎么调试DLL文件: 首先得有一个调用DLL文件的可执行程序,然后调用这个可执行程序. 在工程上 右 ...

  3. C# 经典入门12章-使用泛型类型-2

  4. SQL模擬死結產生

    引用自:http://jengting.blogspot.tw/2012/06/sql.html 根據 MSDN 將死結數量降至最低 裡的圖型模擬死結產生 ~~ 在 SSMS 內開啟兩個 T-SQL ...

  5. ExtJS的4.1新特性简要介绍

    ExtJS的4.1新特性简要介绍 一.动态加载机制 Ext.require动态加载任何类,并且会加载依赖类: 二.新类系统 •类定义:ExtJS4.0以后应入了Ext.define方法,他通过类的字符 ...

  6. mysql 字符集配置

    查看和设置MySQL数据库字符集作者:scorpio 2008-01-21 10:05:17 标签: 杂谈 Liunx下修改MySQL字符集:1.查找MySQL的cnf文件的位置find / -ina ...

  7. hibetnateTemplate常用方法

    一.hibetnateTemplate常用方法 1.delete(Object entity) 删除指定的持久化实例在程序中一般先用    Assert.notNull和 Assert.isTrue断 ...

  8. BNU OJ 50998 BQG's Messy Code

    #include <cstdio> #define _(l) int l #define ___(l,L) for (_(o)=0,x=l o*2;o<x;o++)O= L o; # ...

  9. The 2014 ACM-ICPC Asia Regional Anshan

    继续复盘下一场Regional! [A]-_-/// [B]模拟(之前每次遇到模拟.暴搜都直接跳了,题目太长也是一个原因...下次是在不行可以尝试一下) [C]数论 互质.容斥? [D]数学推导(方差 ...

  10. mysql 二级索引

    mysql中每个表都有一个聚簇索引(clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引(secondary indexes). 以InnoDB来说,每个Inn ...