package cn.liuc.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration; import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile; public class ZipByOriginalExtractUtil { public static ArrayList<String> unzipFile(String zipFilePath) {
String path = zipFilePath.replaceAll("\\\\", "/");
String outputDirectory = path.substring(0, path.lastIndexOf("."))+"/";
return unZip(zipFilePath, outputDirectory);
} /**
* 生存文件夹
*
* @param directory
* 解压文件存放文件夹
* @param subDirectory
* 子文件夹(没有时可传入空字符串)
*/
private static void createDirectory(String directory, String subDirectory) {
String dir[];
File fl = new File(directory);
try {
if (subDirectory == "" && fl.exists() != true)
fl.mkdir();
else if (subDirectory != "") {
dir = subDirectory.replace('\\', '/').split("/");
for (int i = 0; i < dir.length; i++) {
File subFile = new File(directory + File.separator + dir[i]);
if (subFile.exists() == false)
subFile.mkdir();
directory += File.separator + dir[i];
}
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 解压指定的ZIP文件
*
* @param unZipFileName
* 文件名称字符串(包括路径)
* @param outputDirectory
* 解压后存放文件夹
* @return
*/
public static ArrayList<String> unZip(String unZipFileName,
String outputDirectory) {
ArrayList<String> unzipFileList = new ArrayList<String>();
int readedBytes;
FileOutputStream fileOutStream=null;
byte[] buff = new byte[1024];
// File file;
InputStream inputStream=null;
ZipFile zipFile = null;
try {
createDirectory(outputDirectory, "");
if (System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0) {
zipFile = new ZipFile(unZipFileName, "GBK");
} else if (System.getProperty("os.name").toLowerCase()
.indexOf("linux") >= 0) {
zipFile = new ZipFile(unZipFileName, "UTF-8");
}
for (Enumeration<ZipEntry> entries = zipFile.getEntries(); entries
.hasMoreElements();) {
ZipEntry entry = (ZipEntry) entries.nextElement();
if (entry.isDirectory()) {
// 是文件夹。则创建之
String name = entry.getName().substring(0,
entry.getName().length() - 1);
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
// file.mkdirs();
} else {
// 是文件
String fileName = entry.getName().replaceAll("\\\\", "/");
String path = outputDirectory + "/" + fileName;
File f = new File(path);
f.createNewFile();
inputStream = zipFile.getInputStream(entry);
fileOutStream = new FileOutputStream(f);
while ((readedBytes = inputStream.read(buff)) > 0) {
fileOutStream.write(buff, 0, readedBytes);
}
fileOutStream.close();
inputStream.close();
unzipFileList.add(path);
}
}
zipFile.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
if (inputStream!=null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutStream!=null) {
try {
fileOutStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return unzipFileList;
} /**
*
* \brief 測试
*
* @param args
* @throws Exception
* @attention 方法的使用注意事项
* @author liuchao
* @date 2013-9-13
* @note begin modify by 改动人 改动时间 改动内容摘要说明
*/
public static void main(String[] args) throws Exception { unzipFile("E:\\专家协同解决方式.zip");
} }

apache ant解压zip。支持多级文件夹解压的更多相关文章

  1. ZIP解压缩文件的工具类【支持多级文件夹|全】

    ZIP解压缩文件的工具类[支持多级文件夹|全] 作者:Vashon 网上有非常多的加压缩演示样例代码.可是都仅仅是支持一级文件夹的操作.假设存在多级文件夹的话就不行了. 本解压缩工具类经过多次检查及重 ...

  2. 使用Python解压zip、rar文件

    解压 zip 文件 基本解压操作 import zipfile ''' 基本格式:zipfile.ZipFile(filename[,mode[,compression[,allowZip64]]]) ...

  3. 使用java API进行zip递归压缩文件夹以及解压

    一.概述 在本篇文章中,给大家介绍一下如何将文件进行zip压缩以及如何对zip包解压.所有这些都是使用Java提供的核心库java.util.zip来实现的. 二.压缩文件 首先我们来学习一个简单的例 ...

  4. Mac上zip,rar,tar文件命令解压和压缩

    经常遇到在windowns上的压缩文件,在mac上解压出现问题,特意总结了下在Terminal里常用命令的方式解压和压缩文件 1.zip压缩文件 zip命令的参数很多,可以利用"zip -- ...

  5. Java基础知识强化之IO流笔记50:IO流练习之 复制多级文件夹的案例

    1. 复制多级文件夹的案例 需求:复制多级文件夹       数据源:E:\JavaSE\day21\code\demos     目的地:E:\   分析:         A:封装数据源File ...

  6. 用Java实现将多级文件夹下的所有文件统一放到一个文件夹中

    每次下了电影(男生懂得呦),每部电影都放在一个单独的文件夹里,看的时候很是不方便啊,一直重复着进入文件夹.后退,再进.再退的操作,而手动把这些电影全部复制出来又太繁琐.因此为了解决这个问题,用IO写了 ...

  7. bat如何创建多级文件夹(在android设备中)

    在android设备中要创建多个或者多级文件夹时,手动去创建费时费力(有点傻),一个bat文件就能很好的实现这个功能. 1.首先创建同级多个文件夹且在该文件夹下生成一个文件 @echo off ech ...

  8. java中递归实现复制多级文件夹

    常见的流的用法 递归实现复制多级文件夹 FileInputStream & FileOutputStream String content = null;//用来储存解码后的byte数组 in ...

  9. Eclipse 批量创建多级文件夹

      Eclipse 批量创建多级文件夹 CreateTime--2018年3月8日08:23:24 Author:Marydon 1.选中要建立文件夹的父级目录-->右键-->New--& ...

随机推荐

  1. CF 351A - Jeff and Rounding DP

    http://codeforces.com/problemset/problem/351/C 题意:有2*n个浮点数a1,a2,a3...a2*n,把他们分成n队,对于每对<A,B>,对A ...

  2. 题解报告:hdu 1564 Play a game(找规律博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1564 Problem Description New Year is Coming! ailyanlu ...

  3. html表单代码演示

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  4. linux php全能环境一键安装,小白福利!

    phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 phpStudy for Linux 支持Apache/Ng ...

  5. Android FileProvider相关 Failed to find configured root that contains

    问题: 使用FileProvider构造SD卡中文件uri时异常 java.lang.IllegalArgumentException: Failed to find configured root ...

  6. Android开发笔记(6)——类的设定与继承

    转载请注明http://www.cnblogs.com/igoslly/p/6838991.html [类]的设定与继承 当设置相同格式的TextView时,已提出在styles.xml自定义格式统一 ...

  7. Json——转义符

    C#后台直接输出Json字符串需要反斜杠“\” context.Response.Write("[{\"Name\": \"wqx\", \" ...

  8. 如何知道自己的CPU支持SLAT

    因为WP8 SDK发布,很多WP8的开发者们也开始陆续安装WP8的SDK的,然而安装WP8的SDK有很多软件和硬件的要求,其中有一个就是——要求CPU支持二级地址转换(SLAT),如果CPU不支持二级 ...

  9. Random同时生成多个随机数

    贴一个简单示例 public DataTable selectStuInfo() { DataTable dt = new DataTable(); dt.Columns.Add("姓名&q ...

  10. Python 之列表操作

    # len(list)列表元素个数 # max(list)返回列表元素最大值 # min(list)返回列表元素最小值 # list(seq)将元组转换为列表 # list.append(obj)在列 ...