private static String unZipToFile(File file ,File outfiledir,String charsetName) {
//获取文件名称
String filename = file.getName();
FileOutputStream out = null;
InputStream in = null;
ZipFile zipFileData = null;
ZipFile zipFile = null;
try {
//设置若设定有编码方式则使用,否则使用默认utf-8
if (charsetName != null && charsetName != "") {
zipFile = new ZipFile(file.getPath(), Charset.forName(charsetName));
} else {
zipFile = new ZipFile(file.getPath(), Charset.forName("utf8"));
}
//压缩包内容
Enumeration<? extends ZipEntry> entries = zipFile.entries();
//处理创建文件夹
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
String filePath = "";
//获取压缩文件的第一层目录名称
String parentDir = entry.getName().substring(0, entry.getName().indexOf("/"));
//若目标文件夹为空,则默认保存在压缩包所在文件夹,若存在,保存在目标文件夹
if (outfiledir == null) {
//更改一层文件夹名称
filePath = file.getParentFile().getPath() + File.separator + entry.getName().replace(parentDir,filename.substring(0, filename.length() - 4));
//无需更改一层文件夹名称
//filePath = file.getParentFile().getPath() + File.separator + entry.getName();
} else {
//更改一层文件夹名称
filePath = outfiledir.getPath() + File.separator + entry.getName().replace(parentDir, filename.substring(0, filename.length() - 4));
//无需更改一层文件夹名称
//filePath = outfiledir.getPath() + File.separator + entry.getName();
}
System.out.println(filePath);
File f = new File(filePath);
/**
* 创建文件夹路径
*/
File parentFile = f.getParentFile();
if (!parentFile.exists()) {
parentFile.mkdirs();
}
}
/**
* 创建文件内容,如果是文件夹进行下一循环,若是文件进行读写
*/
if (charsetName != null && charsetName != "") {
zipFileData = new ZipFile(file.getPath(), Charset.forName(charsetName));
} else {
zipFileData = new ZipFile(file.getPath(), Charset.forName("utf8"));
}
Enumeration<? extends ZipEntry> entriesData = zipFileData.entries();
while (entriesData.hasMoreElements()) {
ZipEntry entry = entriesData.nextElement();
in = zipFile.getInputStream(entry);
String filePath = "";
//获取压缩文件的第一层目录名称
String parentDir = entry.getName().substring(0, entry.getName().indexOf("/"));
//若目标文件夹为空,则默认保存在压缩包所在文件夹,若存在,保存在目标文件夹
if (outfiledir == null) {
//更改一层文件夹名称
filePath = file.getParentFile().getPath() + File.separator + entry.getName().replace(parentDir, filename.substring(0, filename.length() - 4));
//无需更改一层文件夹名称
//filePath = file.getParentFile().getPath() + File.separator + entry.getName();
} else {
//更改一层文件夹名称
filePath = outfiledir.getPath() + File.separator + entry.getName().replace(parentDir, filename.substring(0, filename.length() - 4));
//无需更改一层文件夹名称
//filePath = outfiledir.getPath() + File.separator + entry.getName();
}
File f = new File(filePath);
if (f.isDirectory()) {
continue;
}
out = new FileOutputStream(filePath);
int len = -1;
byte[] bytes = new byte[1024];
while ((len = in.read(bytes)) != -1) {
out.write(bytes, 0, len);
}
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
return "error";
} finally {
try {
out.close();
in.close();
zipFile.close();
zipFileData.close();
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
}
zip文件解压
最新推荐文章于 2022-03-18 14:40:49 发布