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. python导入包出错:ImportError: No module named XXXXX

    python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用. 如果想 ...

  2. scala函数用法

    直接上代码. package com.test.scala.test object Function { def main(args: Array[String]): Unit = { println ...

  3. C#语言最基础的认识变量

    变量是指一块存储数据的内存空间,并且该内存区域的数据内容可以发生变化. 变量是必须先声明后赋值. 基本的语法:数据类型+变量名: 变量名=数据: 简单的使用技巧:声明赋值简写 Static void ...

  4. 增加删除div

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...

  5. JS——冒泡案例

    模态框 1.因为a链接和和顶级document都注册了单击事件,所以要阻止a链接向父级盒子冒泡,不然又会从document的单击事件走一遍 2.在document的单击事件中,只需要判断触发事件的目标 ...

  6. 学习笔记-java IO流总结 转载

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  7. Lazarus Reading XML- with TXMLDocument and TDOMNode

    这里读取'HistoryPath' ,'TracePath' 元素下的‘value’属性使用的是 var xmlCfg: TXMLDocument; .... function ReadXMLCFG: ...

  8. JDK升级

    保存jboss运行时环境的配置 删除jboss下面的缓存文件 删除deployments里面的war包 重新build项目

  9. centOS7创建python虚拟环境

    参考: 非常棒的2篇博客 https://www.centos.bz/2018/05/centos-7-4-%E5%AE%89%E8%A3%85python3%E5%8F%8A%E8%99%9A%E6 ...

  10. Navicat 连接docker mysql报错

    解决办法: docker exec -it dc10e8b328d7 bashmysql -u root -p 输入密码 use mysql; ALTER USER 'root'@'%' IDENTI ...