179 lines
5.7 KiB
Java
179 lines
5.7 KiB
Java
package com.adc.da.common;
|
|
|
|
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
|
|
import org.apache.commons.compress.archivers.zip.ZipFile;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.poi.util.StringUtil;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import java.io.*;
|
|
import java.util.ArrayList;
|
|
import java.util.Enumeration;
|
|
import java.util.List;
|
|
import java.util.zip.ZipEntry;
|
|
|
|
public class FileUnZip {
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(FileUnZip.class);
|
|
|
|
/**
|
|
* 解压zip文件
|
|
*
|
|
* @param sourceFile,待解压的zip文件; toFolder,解压后的存放路径
|
|
* @throws Exception
|
|
* @author gaoyan
|
|
**/
|
|
public static String unZipFiles(String sourceFile, String descDir) throws IOException {
|
|
File zipFile = new File(sourceFile);
|
|
|
|
File pathFile = new File(descDir);
|
|
if (!pathFile.exists()) {
|
|
pathFile.mkdirs();
|
|
}
|
|
ZipFile zip = new ZipFile(zipFile,"gbk");
|
|
String orgMkdirs = "";
|
|
for (Enumeration entries = zip.getEntries(); entries.hasMoreElements(); ) {
|
|
ZipArchiveEntry entry = (ZipArchiveEntry) entries.nextElement();
|
|
String zipEntryName = entry.getName();
|
|
String outPath = (descDir + "/" + zipEntryName).replaceAll("\\*", "/");
|
|
//判断路径是否存在,不存在则创建文件路径
|
|
File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
|
|
if (!file.exists()) {
|
|
orgMkdirs = outPath.substring(0, outPath.lastIndexOf('/'));
|
|
file.mkdirs();
|
|
}else{
|
|
orgMkdirs = outPath.substring(0, outPath.lastIndexOf('/'));
|
|
}
|
|
//判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
|
|
if (new File(outPath).isDirectory()) {
|
|
continue;
|
|
}
|
|
//输出文件路径信息
|
|
// InputStream in = null;
|
|
// OutputStream out = null;
|
|
System.gc();
|
|
try(InputStream in =zip.getInputStream(entry);
|
|
OutputStream out =new FileOutputStream(outPath)
|
|
){
|
|
byte[] buf1 = new byte[1024];
|
|
int len;
|
|
while ((len = in.read(buf1)) > 0) {
|
|
out.write(buf1, 0, len);
|
|
}
|
|
}catch(IOException e){
|
|
logger.error(e.getMessage(),e);
|
|
}
|
|
}
|
|
System.gc();
|
|
zip.close();
|
|
return orgMkdirs;
|
|
}
|
|
|
|
/**
|
|
* 递归删除文件及文件夹
|
|
*
|
|
* @throws Exception
|
|
* @author gaoyan
|
|
* toFolder,解压后的存放路径
|
|
**/
|
|
public static boolean deleteDir(File dir) {
|
|
if (dir.isDirectory()) {
|
|
String[] children = dir.list();
|
|
for (int i = 0; i < children.length; i++) {
|
|
File files = new File(dir, children[i]);
|
|
boolean success = deleteDir(files);
|
|
if (!success) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
// 目录此时为空,可以删除
|
|
return dir.delete();
|
|
}
|
|
|
|
/**
|
|
* 读取一个目录下所有的Excel文件
|
|
* gaoyan
|
|
*
|
|
* @param path
|
|
*/
|
|
public static List<File> readExcelFile(String path) {
|
|
File file = new File(path);
|
|
List<File> resultlist = new ArrayList<>();
|
|
if (file.isDirectory()) {
|
|
File[] files = file.listFiles();
|
|
for (File fi : files) {
|
|
// 对文件进行过滤,只读取Excel文件
|
|
if (fi.getName().contains(".xls") || fi.getName().contains(".xlsx")) {
|
|
resultlist.add(fi);
|
|
}
|
|
}
|
|
}
|
|
return resultlist;
|
|
}
|
|
|
|
public static List<File> readImpExcelFile(String path) {
|
|
File file = new File(path);
|
|
List<File> resultlist = new ArrayList<>();
|
|
if (file.isDirectory()) {
|
|
File[] files = file.listFiles();
|
|
for (File fi : files) {
|
|
// 对文件进行过滤,只读取Excel文件
|
|
String name = fi.getName();
|
|
// "导入模板".equals(fi.getName()) || "导入模板.xlsx".equals(fi.getName())
|
|
if (name != null &&( fi.getName().contains(".xls") || fi.getName().contains(".xlsx") )){
|
|
resultlist.add(fi);
|
|
}
|
|
}
|
|
}
|
|
return resultlist;
|
|
}
|
|
|
|
/**
|
|
* 根据文件名称读取固定目录下文件
|
|
* gaoyan
|
|
* @param filename
|
|
*/
|
|
public static List<File> readFileByFilename(String path,String filename) {
|
|
List<File> resultlist = new ArrayList<>();
|
|
if (StringUtils.isNotEmpty(path)){
|
|
File file = new File(path);
|
|
if (file.isDirectory()) {
|
|
File[] files = file.listFiles();
|
|
for (File fi : files) {
|
|
// 对文件进行过滤
|
|
if (fi.getName().equals(filename)) {
|
|
resultlist.add(fi);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return resultlist;
|
|
}
|
|
|
|
/**
|
|
*@Description: 删除某个文件
|
|
*@Param: [file]
|
|
*@return: void
|
|
*@Author: duyunbao
|
|
*@date: 2019/5/23 20:31
|
|
*/
|
|
public static void delete(File file) {
|
|
if (!file.exists()) return;
|
|
|
|
if (file.isFile() || file.list() == null) {
|
|
file.delete();
|
|
logger.info("删除了" + file.getName());
|
|
} else {
|
|
File[] files = file.listFiles();
|
|
for (File a : files) {
|
|
delete(a);
|
|
}
|
|
file.delete();
|
|
logger.info("删除了" + file.getName());
|
|
}
|
|
}
|
|
|
|
}
|