ZipFile和ZipInputSteam解压zip文件
最近有个需求,要接受上穿的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文件的更多相关文章
- python用zipfile模块打包文件或是目录、解压zip文件实例
#!/usr/bin/env python # -*- coding: utf-8 -*- from zipfile import * import zipfile #解压zip文件 def unzi ...
- Android 解压zip文件(支持中文)
过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...
- (转载)C#压缩解压zip 文件
转载之: C#压缩解压zip 文件 - 大气象 - 博客园http://www.cnblogs.com/greatverve/archive/2011/12/27/csharp-zip.html C# ...
- Android 解压zip文件你知道多少?
对于Android常用的压缩格式ZIP,你了解多少? Android的有两种解压ZIP的方法,你知道吗? ZipFile和ZipInputStream的解压效率,你对比过吗? 带着以上问题,现在就开始 ...
- java实现解压zip文件,(亲测可用)!!!!!!
项目结构: Util.java内容: package com.cfets.demo; import java.io.File; import java.io.FileOutputStream; imp ...
- Android 解压zip文件
过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...
- Java 上传解压zip文件,并且解析文件里面的excel和图片
需求:上传一个zip文件,zip文件里面包含一个excel和很多图片,需要把excel里面的信息解析出来保存到表中,同时图片也转化成base64保存到数据库表中. PS:为了方便不同水平的开发人员阅读 ...
- 通过javascript在网页端解压zip文件并查看压缩包内容
WEB前端解压ZIP压缩包 web前端解压zip文件有什么用: 只考虑标准浏览器的话, 服务器只要传输压缩包到客户端, 节约了带宽, 而且节约了传输时间, 听起来好像很厉害的说: 如果前端的代 ...
- AIX解压ZIP文件
AIX系统自身是没有解压ZIP文件的,但在AIX安装oracle数据库服务器的话,在$ORACLE_HOME/bin路径下方却有unzip命令,可以解压ZIP文件. 一.shell脚本 之前的版本 ...
随机推荐
- linux下CPU信息查询
1.查看逻辑CPU个数: #cat /proc/cpuinfo |grep "processor"|sort -u|wc -l24 2.由于有超线程技术有必要查看一下物理CPU个数 ...
- JavaBean-- 设置和取得属性
<jsp:setProperty>标签一共有4种使用方法: 自动匹配:<jsp:setProperty name="实例化对象的名称(id)" property= ...
- 玩Mega8 智能充电器-12. 终于实现-dV检测(转)
源:http://blog.chinaunix.net/uid-10701701-id-91873.html 2010.1.3 5:30终于补齐了. 电池充电的-dv 的检测系列图片请移步: http ...
- C# 经典入门15章 -TabControl
- AngularJS Front-End App with Cloud Storage Tutorial Part 1: Building a Minimal App in Seven Steps
原文 : http://www.codeproject.com/Articles/1027709/AngularJS-Front-End-App-with-Cloud-Storage-Tutoria ...
- Java关键字transient和volatile小结(转)
Java关键字transient和volatile小结(转) transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下. tran ...
- 荐 android 如何打包自定义控件(转)
荐 android 如何打包自定义控件(转) 目录[-] 方式一:将项目打包成jar包 方式二:项目作为一个library 设计自定义的控件对android开发人员来说,是家常便饭了,但是多次做项 ...
- Raspberry Pi 上使用WN725N连接WIFI
系统版本 lee@Lee-RPi ~ $ uname -ar Linux Lee-RPi + # PREEMPT Thu Dec :: GMT armv6l GNU/Linux 这个版本的系统,已经集 ...
- php自学笔记3
-------补充--------建议定义常量时,判断常量名是否被定义,用defined()判断,返回布尔型if(!defined("POEM")){//没定义过 define(& ...
- CentOS 7 x64 安装 Ceph
CentOS 7 x64 安装 Ceph 二, 实验环境 节点 IP 主机名 系统 MON 1 ...