142 lines
4.7 KiB
Java
142 lines
4.7 KiB
Java
package io.dataease.commons.utils;
|
|
|
|
import java.io.*;
|
|
import java.util.Enumeration;
|
|
import java.util.zip.ZipEntry;
|
|
import java.util.zip.ZipException;
|
|
import java.util.zip.ZipFile;
|
|
import java.util.zip.ZipInputStream;
|
|
|
|
public class ZipUtils {
|
|
|
|
|
|
/**
|
|
* 解压文件
|
|
*
|
|
* @param zipFilePath 解压文件路径
|
|
* @param outputFolder 输出解压文件路径
|
|
*/
|
|
public static void unZipIt(String zipFilePath, String outputFolder) {
|
|
byte[] buffer = new byte[1024];
|
|
|
|
File folder = new File(outputFolder);
|
|
if (!folder.exists()) {
|
|
folder.mkdir();
|
|
}
|
|
try {
|
|
//get the zip file content
|
|
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath));
|
|
ZipEntry ze = zis.getNextEntry();
|
|
while (ze != null) {
|
|
String fileName = ze.getName();
|
|
File newFile = new File(outputFolder + File.separator + fileName);
|
|
System.out.println("file unzip : " + newFile.getAbsoluteFile());
|
|
//大部分网络上的源码,这里没有判断子目录
|
|
if (ze.isDirectory()) {
|
|
if (!newFile.mkdirs()) {
|
|
System.out.println("was not successful.");
|
|
}
|
|
} else {
|
|
if (!new File(newFile.getParent()).mkdirs()) {
|
|
System.out.println("was not successful.");
|
|
}
|
|
FileOutputStream fos = new FileOutputStream(newFile);
|
|
int len;
|
|
while ((len = zis.read(buffer)) != -1) {
|
|
fos.write(buffer, 0, len);
|
|
}
|
|
fos.close();
|
|
}
|
|
ze = zis.getNextEntry();
|
|
}
|
|
zis.closeEntry();
|
|
zis.close();
|
|
System.out.println("Done");
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public static void unzip(File source, String out) throws IOException {
|
|
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(source))) {
|
|
|
|
ZipEntry entry = zis.getNextEntry();
|
|
|
|
while (entry != null) {
|
|
|
|
File file = new File(out, entry.getName());
|
|
|
|
if (entry.isDirectory()) {
|
|
if (!file.mkdirs()) {
|
|
System.out.println("was not successful.");
|
|
}
|
|
} else {
|
|
File parent = file.getParentFile();
|
|
|
|
if (!parent.exists()) {
|
|
if (!parent.mkdirs()) {
|
|
System.out.println("was not successful.");
|
|
}
|
|
}
|
|
|
|
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))) {
|
|
|
|
byte[] buffer = new byte[Math.toIntExact(entry.getSize())];
|
|
|
|
int location;
|
|
|
|
while ((location = zis.read(buffer)) != -1) {
|
|
bos.write(buffer, 0, location);
|
|
}
|
|
}
|
|
}
|
|
entry = zis.getNextEntry();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 把所有文件都直接解压到指定目录(忽略子文件夹)
|
|
*
|
|
* @param zipFile
|
|
* @param folderPath
|
|
* @throws ZipException
|
|
* @throws IOException
|
|
*/
|
|
public static void upZipFile(File zipFile, String folderPath) throws ZipException, IOException {
|
|
File desDir = new File(folderPath);
|
|
if (!desDir.exists()) {
|
|
if (!desDir.mkdirs()) {
|
|
System.out.println("was not successful.");
|
|
}
|
|
}
|
|
ZipFile zf = new ZipFile(zipFile);
|
|
for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements(); ) {
|
|
ZipEntry entry = ((ZipEntry) entries.nextElement());
|
|
InputStream in = zf.getInputStream(entry);
|
|
File desFile = new File(folderPath, java.net.URLEncoder.encode(entry.getName(), "UTF-8"));
|
|
|
|
if (!desFile.exists()) {
|
|
File fileParentDir = desFile.getParentFile();
|
|
if (!fileParentDir.exists()) {
|
|
if (!fileParentDir.mkdirs()) {
|
|
System.out.println("was not successful.");
|
|
}
|
|
}
|
|
}
|
|
|
|
OutputStream out = new FileOutputStream(desFile);
|
|
byte[] buffer = new byte[1024 * 1024];
|
|
int realLength = in.read(buffer);
|
|
while (realLength != -1) {
|
|
out.write(buffer, 0, realLength);
|
|
realLength = in.read(buffer);
|
|
}
|
|
|
|
out.close();
|
|
in.close();
|
|
|
|
}
|
|
}
|
|
}
|