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. Offer收割_4

    1.水题 2.BFS宽搜(使用优先队列priority_queue) 4.题意:给数组a.要求重排列数组,使得数组中的任意相邻的两个元素不同.如果存在多个方案,那么选择字典序最小的方案.  如果不能满 ...

  2. C# 文件操作【转】

    本文也收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加.拷贝.删除.移动文件.创建目录.递归删除文件夹及文件.指定文件夹下面的所有内容copy到目标文件夹下面.指定文件夹下面的所有内 ...

  3. 查看当前linux版本

    lsb_release -a 如果命令不存在,则yum安装 yum install redhat-lsb

  4. unity多语言本地化

    简介 嗯...一般来说做游戏啥的都不会只发一个国家,但是每个国家语言不同,就存在多语言本地化的问题,然后直接用过一个通过xml完成本地化的东东,然后策划反馈不会修改xml,扔给我一个excel让我自己 ...

  5. python基础篇(一)-------- 字符串的操作

    1.字符串的常用操作: 已知字符串:str = "hello world zhangsan and zhangsan" 1.字符串的长度:len(str) 2.查看字符串的索引值: ...

  6. 查看Windows XP是否已激活的方法

    打开开始→运行, 在输入:oobe/msoobe /a,回车后系统会弹出窗口告诉你系统是否已经激活

  7. codeforces_738D

    D. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  8. 在把table表格中的数据导出到Excel的时候,以科学计数法显示位数多的数字时怎么解决?

    sbHtml.AppendFormat("<td> {0}</td>", data[i].IDcard.ToString()); sbHtml.Append ...

  9. shouldComponentUpdate不能直接比较object

    凡是参阅过react官方英文文档的童鞋大体上都能知道对于一个组件来说,其state的改变(调用this.setState()方法)以及从父组件接受的props发生变化时,会导致组件重渲染,正所谓&qu ...

  10. AcGePoint3d ads_point 转换

    AcGePoint3d (AcGePoint2d )转换 ads_point 用:asDblArray函数. ads_point 转换AcGePoint2d  用asPnt2d(const doubl ...