/**
* 解压上传的zip文件流
* @param stream
* @param outputDirectory
*/
public static String unzip(InputStream stream,String outputDirectory){
ZipInputStream in = null;
in = new ZipInputStream(stream);

ZipEntry z;
String outDir="";
String filePath="";
try {
while ((z=in.getNextEntry())!= null){
//System.out.println("unziping "+z.getName());

if (z.isDirectory()){
String name=z.getName();
name=name.substring(0,name.length()-1);
File f=new File(outputDirectory+File.separator+name);
f.mkdir();
//System.out.println("mkdir "+outputDirectory+File.separator+name);

}else{
outDir = outputDirectory+File.separator+UPLOAD_PATH;
/*File fdir = new File(outDir);
if (!fdir.exists()) {
fdir.mkdirs();
} */
makeDir(outDir);
//System.out.println("outDir "+outDir);
filePath = outDir+File.separator+z.getName();
//删除文件
FileUtil.deleteFile(filePath);

File f=new File(filePath);

if(!f.exists()){
f.createNewFile();
}
//处理后缀名
String fileName = z.getName();
String prefix=fileName.substring(fileName.lastIndexOf(".")+1);
//System.out.println(prefix);
if(!prefix.equalsIgnoreCase("zip")){
in.close();
return "00003";
}
FileOutputStream out=new FileOutputStream(f);
int b;
while ((b=in.read()) != -1){
out.write(b);
}
out.close();
}
}
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "00000";

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "00000";
}
if(StringUtils.isEmpty(filePath) ||
StringUtils.isEmpty(outDir)){
return "00001";
}
//处理zip文件
String outFileDir = outputDirectory;

String result = unZip(filePath,outFileDir);
return result;
}

public static String unZip(String fileName, String unZipDir) {
String outFileDir = unZipDir+File.separator+DATA_PATH;
//makeDir(outFileDir);
try {
// 先判断目标文件夹是否存在,如果不存在则新建,如果父目录不存在也新建
File f = new File(outFileDir);
if (!f.exists()) {
f.mkdirs();
}

File[] files = f.listFiles();

if(files == null)
return "00003";
for (int i = 0; i < files.length; i++) {
// 删除子文件
if (files[i].isFile()) {
boolean flag =FileUtil.delete(files[i].getAbsolutePath());
if (!flag) {
break;
}
}
}

BufferedOutputStream dest = null;
BufferedInputStream is = null;
ZipEntry entry;
ZipFile zipfile = new ZipFile(fileName);
//删除zip文件
FileUtil.deleteFile(fileName);

Enumeration e = zipfile.entries();
while (e.hasMoreElements()) {
entry = (ZipEntry) e.nextElement();
//System.out.println("Extracting: " + entry);
is = new BufferedInputStream(zipfile.getInputStream(entry));
int count;
byte data[] = new byte[BUFFER];
FileOutputStream fos = new FileOutputStream(outFileDir + File.separator
+ entry.getName());
//System.out.println("entry.getName(): " + entry.getName());
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = is.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
is.close();
}

//
} catch (Exception e) {
e.printStackTrace();
return "00003";
}
return "";
}

public static void main(String[] args) {
// TODO Auto-generated method stub
String fileName = "e:/008 山东长鸿工程塑胶有限公司 山东长鸿工程塑胶有限公司-2015.zip";
String unZipDir = "e:/2/2";

ZipInputStream in = null;
try {
in = new ZipInputStream(new FileInputStream(zipFileName));

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}

unzip(in, unZipDir);

}

解压上传的zip文件流和文件的更多相关文章

  1. PHP自动解压上传的rar文件

    PHP自动解压上传的rar文件   浏览:383 发布日期:2015/07/20 分类:功能实现 关键字: php函数 php扩展 大家都知道php有个zip类可直接操作zip压缩文件,可是用户有时候 ...

  2. Java解压上传zip或rar文件,并解压遍历文件中的html的路径

    1.本文只提供了一个功能的代码 public String addFreeMarker() throws Exception { HttpSession session = request.getSe ...

  3. Flask保存或解压上传的文件

    import os import uuid import shutil import zipfile from flask import Flask, render_template, request ...

  4. 文件上传之——用SWF插件实现文件异步上传和头像截取

    之前写过几篇文件上传,那些都不错.今天小编带领大家体会一种新的上传方法,及使用Flash插件实现文件上传. 使用Flash的好处就是可以解决浏览器兼容性问题.之前我写的一个快捷复制功能也是利用的Fla ...

  5. linux中解压.tgz, .tar.gz ,zip ,gz, .tar文件

    转载:https://blog.csdn.net/fu6543210/article/details/7984578 将.tgz文件解压在当前目录: tar zxvf MY_NAME.tgz 将.ta ...

  6. Struts2文件上传(基于表单的文件上传)

    •Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目   •Commons-Fil ...

  7. Linux解压.tar .tgz .tar.gz .tar.Z等文件

    .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ---------------------- ...

  8. uedit修改文件上传路劲,支持api文件接口

    首先修改一个东西ueditor/ueditor.config.js serverUrl: URL + "php/controller.php" 原来 serverUrl: &quo ...

  9. 用户态与内核态 & 文件流与文件描述符 简介【转】

    转自:https://www.cnblogs.com/Jimmy1988/p/7479856.html 用户态和内核态 程序代码的依赖和调用关系如下图所示: Lib:标准ASCI C函数,几乎所有的平 ...

随机推荐

  1. envoy

    微服务意味着网络更加依赖于服务抽象边界. 随着相互依赖的服务数量日渐增长,系统100%没问题的时间会变少,整个系统经常有部分功能处于降级状态.

  2. Flame Graphs

    http://www.brendangregg.com/flamegraphs.html Flame graphs are a visualization of profiled software, ...

  3. 总结文件操作函数(二)-C语言

    格式化读写: #include <stdio.h> int printf(const char *format, ...);                   //相当于fprintf( ...

  4. Oracle - 数据更新 - 增删改

    /* 数据的更新 增加 删除 修改 */ -----------------------------------增加(一次只能插入一条数据) --自定义插入数据列的顺序 ,,); --按照数据库默认的 ...

  5. Newtonsoft.Json.dll 反序列化JSON字符串

    上一篇JSON博客<JSON入门级学习小结--JSON数据结构>中已对JSON做了简单介绍,JSON字符串数组数据样式大概是这样子的: 如今因为项目需求(asp.net web网站,前台向 ...

  6. 【SCOI 2005】 最大子矩阵

    [题目链接] 点击打开链接 [算法] 动态规划 我们发现,M只有两种取值,1和2,那么,只需分类讨论即可 当M = 1时,其实这个问题就成了就最大连续子段和的问题,只不过要选K段而已 用f[i][j] ...

  7. Ajax 异步查询 ,刷新页面的一部分

    调用的过程是,通过Jquery注册单击事件,当单击分部视图中的按钮,就取得分部视图中文本框的值,然后调用$.Get()函数以Get形式调用控制器SearchPeople方法,参数为searchText ...

  8. Bootstrap标签页

    用法 您可以通过以下两种方式启用标签页: 通过 data 属性:您需要添加 data-toggle="tab" 或 data-toggle="pill" 到锚文 ...

  9. Linq list 排序,Dictionary 排序

    C# 对List成员排序的简单方法 http://blog.csdn.net/wanzhuan2010/article/details/6205884 LINQ之路系列博客导航 http://www. ...

  10. JNI编程(一) —— 编写一个最简单的JNI程序(转载)

    转自:http://chnic.iteye.com/blog/198745 忙了好一段时间,总算得了几天的空闲.貌似很久没更新blog了,实在罪过.其实之前一直想把JNI的相关东西整理一下的,就从今天 ...