package com.bmcc.claim.utils;
/*
提供zip文件的解压缩接口:
unZipFile:
输入:zipFileName(zip文件的绝对路径),outputDirectory(zip文件解压缩后的存放路径)
输出:解压缩后的文件列表绝对路径存放在ArrayList动态数组中
说明:解压缩zip文件,解压缩后存放到outputDirectory路径下
如果outputDierctory为null,解压到zipFileName文件的当前目录下
*/
import java.io.*;
import java.util.*;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;
public class ApacheZipFile {
/**
* 解压缩zip文件,解压缩后存放到outputDirectory路径下
* @param zipFileName zip文件的绝对路径
* @param outputDirectory zip文件解压缩后的存放路径
* @return 解压缩后的文件列表绝对路径存放在ArrayList动态数组中
*/
public static List unZipFile(String zipFileName, String outputDirectory) {
ArrayList list = new ArrayList();//文件解压缩后的文件列表绝对路径
if(zipFileName == null){
return list;
}
if(outputDirectory == null){
outputDirectory = zipFileName.substring(0,zipFileName.replace('\\', '/').lastIndexOf("/"));
}
File file = new File(zipFileName);
if (!file.exists()) {
return list;
}
//如果解压目录不存在,则创建目录
createDirectory(outputDirectory, "");
try {
ZipFile zipFile = new ZipFile(zipFileName);
Enumeration e = zipFile.getEntries();
ZipArchiveEntry zipEntry = null;
while (e.hasMoreElements()) {
zipEntry = (ZipArchiveEntry) e.nextElement();
if (zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring(0, name.length() - 1);
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
} else {
String fileName = zipEntry.getName();
fileName = fileName.replace('\\', '/');
//文件在多层目录下 这时需要创建目录如:d1/d2/1.txt
if (fileName.indexOf("/") != -1) {
createDirectory(outputDirectory, fileName.substring(0,
fileName.lastIndexOf("/")));
fileName = fileName.substring(
fileName.lastIndexOf("/") + 1, fileName.length());
}
list.add(outputDirectory + File.separator
+ zipEntry.getName());
File f = new File(outputDirectory + File.separator
+ zipEntry.getName());
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out = new FileOutputStream(f);
byte[] by = new byte[1024];
int c;
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
out.close();
in.close();
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
return list;//返回zip文件解压撒后文件列表的绝对路径
}
/**
* 创建目录
* @param directory
* @param subDirectory
*/
public static void createDirectory(String directory, String subDirectory) {
String dir[];
File fl = new File(directory);
try {
if (subDirectory == "" && fl.exists() != true)
fl.mkdirs();
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())
subFile.mkdir();
directory += File.separator + dir[i];
}
}
}catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
public static void main(String[] args) throws Exception {
String zipFileName = "c://test.zip";
String outputDirectory = "c://unzip//test";
List list = ApacheZipFile.unZipFile(zipFileName, outputDirectory);
for(int i=0;i<list.size();i++){
System.out.println("file" + i + " = "+ (String)list.get(i));
}
}
}
java 解压压缩文件
最新推荐文章于 2024-05-23 18:16:51 发布