//第一个参数就是需要解压的文件,第二个就是解压的目录
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格式的文件进行解压缩的更多相关文章

  1. Java实现对zip和rar文件的解压缩

    通过java实现对zip和rar文件的解压缩

  2. 如何在linux下解压缩rar和zip格式的文件压缩包

    转载:http://oldboy.blog.51cto.com/2561410/597515 使用apt-get安装:  sudo apt-get install  rar  zip rar使用: 将 ...

  3. python(49):把文件压缩成zip格式的文件

    有时需要用到压缩文件,网上搜集了一段代码: 分享一下: import os import zipfile def make_zip(localPath, pname): zipf = zipfile. ...

  4. 列出zip文件内全部内容 当前目录下的所有文件压缩成zip格式的文件(file.zip)

    [root@ok Desktop]# zip -r image.zip ./*.jpg adding: 20161007_113743.jpg (deflated 0%) adding: 201610 ...

  5. zip格式压缩文件辅助类(ZipHelper)

    /// <summary> /// 压缩解压文件 /// </summary> public class ZipHelper { /// <summary> /// ...

  6. Linux下zip格式文件的解压缩和压缩

    Linux下zip格式文件的解压缩和压缩 Linux下的软件包很多都是压缩包,软件的安装就是解压缩对应的压缩包.所以,就需要熟练使用常用的压缩命令和解压缩命令.最常用的压缩格式有.tar.gz/tgz ...

  7. C#压缩文件为zip格式

    Vercher   C#压缩文件为zip格式 需要ICSharpCode.SharpZipLib.dll,网上下载的到. 代码是从网上找来的: 1 public class ZipClass 2 { ...

  8. Linux压缩解压 tar.gz格式的文件.查看tomcat是否运行

    tar命令详解 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用 ...

  9. java压缩/解压缩zip格式文件

    因为项目要用到压缩.解压缩zip格式压缩包,只好自己封装一个,对于网上流行的中文乱码的问题,本文的解决方法是用apache的包代替jdk里的.基本上还是比较好用的. 废话少说,直接上代码. }     ...

随机推荐

  1. Codeforces437 B. The Child and Set

    题目类型:位运算 传送门:>Here< 题意:给出\(sum和limit\),求一个集合\(S\),其中的元素互不相同且不超过\(limit\),他们的\(lowbit\)之和等于\(su ...

  2. python学习day8 文件操作(深度学习)

    文件操作 (day7内容扩展) 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码')obj.write()obj.read()obj.close() 2 ...

  3. (二)Qt窗口应用程序Widget

    QMainWindow,QWidget,QDialog,这三基类都可以作为顶层窗口 QWidget:是所有窗口类的父类,功能最简单 QMainWindow:如果窗口需要菜单栏,工具栏,状态栏,就需要Q ...

  4. Pandas系列(十三)-其他常用功能

    一.统计数据频率 1. values_counts pd.value_counts(df.column_name) df.column_name.value_counts() Series.value ...

  5. 未能找到类型或命名空间名称“Quartz”

    C# 项目中使用Quartz必须使用.NetFrameWork4,而不能使用Client,否则的话会出现如题所示错误.

  6. Pipeline build step with parameters

    build step https://jenkins.io/doc/pipeline/steps/pipeline-build-step/#build-build-a-job 一个任务的执行触发,另外 ...

  7. split host

    # encoding:utf-8 _portprog = None def split_host_port(host): """ split the host :para ...

  8. jQuery.rotate.js(控制图片转动)

    jQuery.rotate.js笔记   1. jQuery.rotate.js是什么 一个开源的兼容多浏览器的jQuery插件用来对元素进行任意角度的旋转动画. 这个库开发的目的是为了旋转img的, ...

  9. Python日志模块logging用法

    1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 ...

  10. Django之restframework

    启动流程:引入rest_framework APP 在restframework中,GET数据可以通过request.query_params.get(xxx)获取,post数据可以通过request ...