apache ant解压zip。支持多级文件夹解压
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。支持多级文件夹解压的更多相关文章
- ZIP解压缩文件的工具类【支持多级文件夹|全】
ZIP解压缩文件的工具类[支持多级文件夹|全] 作者:Vashon 网上有非常多的加压缩演示样例代码.可是都仅仅是支持一级文件夹的操作.假设存在多级文件夹的话就不行了. 本解压缩工具类经过多次检查及重 ...
- 使用Python解压zip、rar文件
解压 zip 文件 基本解压操作 import zipfile ''' 基本格式:zipfile.ZipFile(filename[,mode[,compression[,allowZip64]]]) ...
- 使用java API进行zip递归压缩文件夹以及解压
一.概述 在本篇文章中,给大家介绍一下如何将文件进行zip压缩以及如何对zip包解压.所有这些都是使用Java提供的核心库java.util.zip来实现的. 二.压缩文件 首先我们来学习一个简单的例 ...
- Mac上zip,rar,tar文件命令解压和压缩
经常遇到在windowns上的压缩文件,在mac上解压出现问题,特意总结了下在Terminal里常用命令的方式解压和压缩文件 1.zip压缩文件 zip命令的参数很多,可以利用"zip -- ...
- Java基础知识强化之IO流笔记50:IO流练习之 复制多级文件夹的案例
1. 复制多级文件夹的案例 需求:复制多级文件夹 数据源:E:\JavaSE\day21\code\demos 目的地:E:\ 分析: A:封装数据源File ...
- 用Java实现将多级文件夹下的所有文件统一放到一个文件夹中
每次下了电影(男生懂得呦),每部电影都放在一个单独的文件夹里,看的时候很是不方便啊,一直重复着进入文件夹.后退,再进.再退的操作,而手动把这些电影全部复制出来又太繁琐.因此为了解决这个问题,用IO写了 ...
- bat如何创建多级文件夹(在android设备中)
在android设备中要创建多个或者多级文件夹时,手动去创建费时费力(有点傻),一个bat文件就能很好的实现这个功能. 1.首先创建同级多个文件夹且在该文件夹下生成一个文件 @echo off ech ...
- java中递归实现复制多级文件夹
常见的流的用法 递归实现复制多级文件夹 FileInputStream & FileOutputStream String content = null;//用来储存解码后的byte数组 in ...
- Eclipse 批量创建多级文件夹
Eclipse 批量创建多级文件夹 CreateTime--2018年3月8日08:23:24 Author:Marydon 1.选中要建立文件夹的父级目录-->右键-->New--& ...
随机推荐
- 【USACO2006 Mar】滑雪缆车 skilift
[USACO2006 Mar] 滑雪缆车 skilift Time Limit 1000 msMemory Limit 131072 KBytes Description 科罗拉多州的罗恩打算为奶牛建 ...
- MySQL的安装和启动
一.MySQL各类安装方法的比较 在Linux系统下,MySQL有3种主要的安装方式,分别是:RPM安装.二进制安装.源码安装.三种安装方式的优缺点如下表所示: RPM安装 二进制安装 源码安装 ...
- sikuli--前端自动化操作的神器
前端自动话操作应用很广泛,从网购秒杀活动实现自动化抢购,到区块链货币高频交易前端脚本编写(非合作交易所不提供api的情况下). 自动化的流派分为2类,一类是对DOM对象进行解析的,这个是主流,但是受特 ...
- MVC系列学习(九)-DTO的使用
本次学习用的数据库,如下 1.什么是DTO:DataTransferObject 即数据传输对象,服务端的客户端的通信,自动定义个小的实体类,里面只包含我们需要传输的属性 2.不用DTO会有什么问题 ...
- JS——client
clientTop.clientLeft: clientTop:盒子的上boder clientLeft:盒子的左border clientWidth与clientHeight 1.在有DTD情况下: ...
- ASP.NET 缓存(Cache)
ASP.NET提供了在一个ASP.NET应用程序基本上缓存信息的编程功能.该功能和Application对象相似,但它具有在ASP.NET应用程序的生命周期内动态维护缓存信息的能力.在应用程序中缓存数 ...
- 【译】x86程序员手册04 - 2.2数据类型
2.2 Data Types 数据类型 Bytes, words, and doublewords are the fundamental data types (refer to Figure 2- ...
- atom 插件安装【转载】
http://www.cnblogs.com/20145221GQ/p/5334762.html 问题: 输入apm install后,可能一直没有响应,要强行退. 不知道安装的时候可不可以打开ato ...
- 关于python中的staticmethod
python中的staticmethod 主要是方便将外部函数集成到类体中,美化代码结构,重点在不需要类实例化的情况下调用方法 如果你去掉staticmethod,在方法中加self也可以通过实例化访 ...
- Codeforces_733D
D. Kostya the Sculptor time limit per test 3 seconds memory limit per test 256 megabytes input stand ...