对.zip格式的文件进行解压缩
//第一个参数就是需要解压的文件,第二个就是解压的目录
public static boolean upZipFileDir(File zipFile, String folderPath) {
ZipFile zfile= null;
try {
//转码为GBK格式,支持中文
zfile = new ZipFile(zipFile,"GBK");
} catch (IOException e) {
e.printStackTrace();
return false;
}
Enumeration zList=zfile.getEntries();
ZipEntry ze=null;
byte[] buf=new byte[1024];
while(zList.hasMoreElements()){
ze=(ZipEntry)zList.nextElement();
//列举的压缩文件里面的各个文件,判断是否为目录
if(ze.isDirectory()){
String dirstr = folderPath + ze.getName();
dirstr.trim();
File f=new File(dirstr);
f.mkdir();
continue;
}
OutputStream os= null;
FileOutputStream fos = null;
// ze.getName()会返回 script/start.script这样的,是为了返回实体的File
File realFile = getRealFileName(folderPath, ze.getName());
try {
fos = new FileOutputStream(realFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
os = new BufferedOutputStream(fos);
InputStream is= null;
try {
is = new BufferedInputStream(zfile.getInputStream(ze));
} catch (IOException e) {
e.printStackTrace();
return false;
}
int readLen=0;
//进行一些内容复制操作
try {
while ((readLen=is.read(buf, 0, 1024))!=-1) {
os.write(buf, 0, readLen);
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
try {
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
try {
zfile.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
} /**
* 给定根目录,返回一个相对路径所对应的实际文件名.
* @param baseDir 指定根目录
* @param absFileName 相对路径名,来自于ZipEntry中的name
* @return java.io.File 实际的文件
*/
public static File getRealFileName(String baseDir, String absFileName){
String[] dirs=absFileName.split("/");
File ret = new File(baseDir);
String substr = null; if(dirs.length>1){
for (int i = 0; i < dirs.length-1;i++) {
substr = dirs[i];
ret=new File(ret, substr);
} if(!ret.exists())
ret.mkdirs();
substr = dirs[dirs.length-1];
ret=new File(ret, substr);
return ret;
}else{
ret = new File(ret,absFileName);
}
return ret;
}
注意:上面代码中的upZipFileDir方法,所用到的ZipFile类,尽可能不用java.util.zip.ZipFile,而是用org.apache.tools.zip.ZipFile。这里需要添加依赖库:compile 'org.apache.ant:ant:1.8.4'
对.zip格式的文件进行解压缩的更多相关文章
- Java实现对zip和rar文件的解压缩
通过java实现对zip和rar文件的解压缩
- 如何在linux下解压缩rar和zip格式的文件压缩包
转载:http://oldboy.blog.51cto.com/2561410/597515 使用apt-get安装: sudo apt-get install rar zip rar使用: 将 ...
- python(49):把文件压缩成zip格式的文件
有时需要用到压缩文件,网上搜集了一段代码: 分享一下: import os import zipfile def make_zip(localPath, pname): zipf = zipfile. ...
- 列出zip文件内全部内容 当前目录下的所有文件压缩成zip格式的文件(file.zip)
[root@ok Desktop]# zip -r image.zip ./*.jpg adding: 20161007_113743.jpg (deflated 0%) adding: 201610 ...
- zip格式压缩文件辅助类(ZipHelper)
/// <summary> /// 压缩解压文件 /// </summary> public class ZipHelper { /// <summary> /// ...
- Linux下zip格式文件的解压缩和压缩
Linux下zip格式文件的解压缩和压缩 Linux下的软件包很多都是压缩包,软件的安装就是解压缩对应的压缩包.所以,就需要熟练使用常用的压缩命令和解压缩命令.最常用的压缩格式有.tar.gz/tgz ...
- C#压缩文件为zip格式
Vercher C#压缩文件为zip格式 需要ICSharpCode.SharpZipLib.dll,网上下载的到. 代码是从网上找来的: 1 public class ZipClass 2 { ...
- Linux压缩解压 tar.gz格式的文件.查看tomcat是否运行
tar命令详解 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用 ...
- java压缩/解压缩zip格式文件
因为项目要用到压缩.解压缩zip格式压缩包,只好自己封装一个,对于网上流行的中文乱码的问题,本文的解决方法是用apache的包代替jdk里的.基本上还是比较好用的. 废话少说,直接上代码. } ...
随机推荐
- 当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)
由于历史原因,Python有两个大的版本分支,Python2和Python3,又由于一些库只支持某个版本分支,所以需要在电脑上同时安装Python2和Python3,因此如何让两个版本的Python兼 ...
- 【bfs】最少转弯问题
题目描述 给出一张地图,这张地图被分为n×m(n,m<=100)个方块,任何一个方块不是平地就是高山.平地可以通过,高山则不能.现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯才能 ...
- nuxt.js实战之window和document对象的使用
在开发nuxt项目的时候,我们难免会使用到document来获取dom元素.如果直接在文件中使用就会报错.这是因为document是浏览器端的东西服务端并没有. 解决方法: 我们只需要在使用的地方通过 ...
- create-react-app中添加less支持
前言 使用 create-react-app 脚手架创建项目后,默认是不支持 less 的.所以我们需要手动添加. 第一步 暴露webpack配置文件 使用 create-react-app 创建的项 ...
- CF226D The table
题目链接 题意 给出一个\(n\times m\)的矩阵,可以把某些行和某些列上面的数字变为相反数.问修改那些行和哪些列可以使得所有行和所有列之和都为非负数. 思路 每次将负数的行或者列变为相反数.因 ...
- Ubuntu16.04 安装g++6
https://blog.csdn.net/qq_34877350/article/details/81182022 1.安装gcc-6: sudo apt-get update && ...
- HDU 5983(模拟魔方 模拟)
题意是说给定一个 2*2 魔方的各个面的情况,问是否能转动不超过一次使得魔方复原. 思路是先在输入的时候统计一下已完成的面数,要想以最多一次的转动使得魔方复原,那么已完成的面数只能是 2 面或者 6 ...
- Select文字居右显示
使用text-align: right;不起作用,应当使用direction: rtl;
- cmd 命令添加防火墙端口
windows dos 命令添加防火墙端口. 示例 123 端口: netsh firewall add portopening protocol = UDP port = name = NTPSER ...
- win10自带邮箱添加网易企业邮箱
开始-邮件-账户-添加账户-高级安装程序-internet电子邮件-然后输入网易企业邮箱的用户名和相关服务器设置就行了 接收服务器 pop.qiye.163.com发送服务器 smtp.qiye.16 ...