|
|
package com.engine.custom.hg.util;
|
|
|
|
|
|
import km.org.apache.poi.util.TempFile;
|
|
|
import org.apache.tools.zip.ZipEntry;
|
|
|
import org.apache.tools.zip.ZipFile;
|
|
|
import org.apache.tools.zip.ZipOutputStream;
|
|
|
import weaver.general.BaseBean;
|
|
|
|
|
|
import java.io.*;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.Date;
|
|
|
import java.util.Enumeration;
|
|
|
|
|
|
|
|
|
public class ZipUtil {
|
|
|
static final int BUFFER = 2048;
|
|
|
|
|
|
|
|
|
//创建文件夹
|
|
|
public File crFile(String pathName){
|
|
|
// bean.writeLog("创建文件夹==="+pathName);
|
|
|
File file=new File(pathName);
|
|
|
try {
|
|
|
// bean.writeLog("创建文件夹==="+file.exists());
|
|
|
if(!file.exists()){
|
|
|
file.mkdir();
|
|
|
}
|
|
|
}catch (Exception E){
|
|
|
// bean.writeLog("Exception"+E.getMessage());
|
|
|
}
|
|
|
return file;
|
|
|
}
|
|
|
|
|
|
public String mkTemper(String filePath){
|
|
|
crFile(filePath);
|
|
|
Date date = new Date();
|
|
|
SimpleDateFormat ft = new SimpleDateFormat ("yyyyMMdd");
|
|
|
crFile(filePath+"/"+ft.format(date));
|
|
|
return filePath+"/"+ft.format(date);
|
|
|
}
|
|
|
|
|
|
public void writeToTxt(String path,String title,String content,Boolean append){
|
|
|
try {
|
|
|
/* 写入Txt文件 */
|
|
|
File mkdirsName = new File(path);
|
|
|
// 相对路径
|
|
|
if(!mkdirsName.exists()){
|
|
|
mkdirsName.mkdirs();
|
|
|
}
|
|
|
File writename = new File(path+"/"+title+".txt");
|
|
|
// 存在即根据操作系统添加换行符
|
|
|
if(!writename.exists() && append==true) {
|
|
|
// 创建新文件
|
|
|
writename.createNewFile();
|
|
|
}else if("del".equals(content) && append==false){
|
|
|
writename.delete();
|
|
|
return;
|
|
|
}else if(!writename.exists() && append==false){
|
|
|
writename.createNewFile();
|
|
|
}else {
|
|
|
String osName = System.getProperties().getProperty("os.name");
|
|
|
System.out.println(osName);
|
|
|
if ("Linux".equals(osName)) {
|
|
|
content = "\r" + content;
|
|
|
} else {
|
|
|
content = "\r\n" + content;
|
|
|
}
|
|
|
}
|
|
|
// 如果是在原有基础上写入则append属性为true,默认为false
|
|
|
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(writename, append), StandardCharsets.UTF_8));
|
|
|
// 写入TXT
|
|
|
out.write(content);
|
|
|
// 把缓存区内容压入文件
|
|
|
out.flush();
|
|
|
// 最后记得关闭文件
|
|
|
out.close();
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// /**
|
|
|
// *
|
|
|
// * @param ZIP_FILE_AFTER 压缩文件
|
|
|
// * @param ZIP_FILE_BEFORE 解压地址
|
|
|
// * @param fileName 重命名
|
|
|
// * @return
|
|
|
// */
|
|
|
// public static boolean zipToFolder(String ZIP_FILE_AFTER, String ZIP_FILE_BEFORE ,String fileName) {
|
|
|
// try {
|
|
|
// BaseBean bean = new BaseBean();
|
|
|
// ZipFile zipFile = new ZipFile(ZIP_FILE_AFTER);
|
|
|
// Enumeration emu = zipFile.entries();
|
|
|
// // bean.writeLog(ZIP_FILE_AFTER+"=="+ZIP_FILE_BEFORE+"=="+fileName);
|
|
|
// int i = 0;
|
|
|
// while (emu.hasMoreElements()) {
|
|
|
// ZipEntry entry = (ZipEntry) emu.nextElement();
|
|
|
// // bean.writeLog("entry.getName()"+entry.getName());
|
|
|
// // 会把目录作为一个file读出一次,所以只建立目录就可以,之下的文件还会被迭代到。
|
|
|
//
|
|
|
// if (entry.isDirectory()) {
|
|
|
// new File(ZIP_FILE_BEFORE + File.separator+new String(entry.getName().getBytes(StandardCharsets.UTF_8))).mkdirs();
|
|
|
// continue;
|
|
|
// }
|
|
|
//
|
|
|
// BufferedInputStream bis = new BufferedInputStream(zipFile
|
|
|
// .getInputStream(entry));
|
|
|
// InputStreamReader isr = new InputStreamReader(bis);
|
|
|
// // File file = new File(ZIP_FILE_BEFORE +File.separator+ entry.getName());
|
|
|
// String s = new String(entry.getName().getBytes(StandardCharsets.UTF_8));
|
|
|
// File file = new File(ZIP_FILE_BEFORE + File.separator + s );
|
|
|
// bean.writeLog("entry.getName()==="+s);
|
|
|
// // 加入这个的原因是zipfile读取文件是随机读取的,这就造成可能先读取一个文件
|
|
|
// // 而这个文件所在的目录还没有出现过,所以要建出目录来。
|
|
|
// File parent = file.getParentFile();
|
|
|
// if (parent != null && (!parent.exists())) {
|
|
|
// parent.mkdirs();
|
|
|
// }
|
|
|
//
|
|
|
// FileOutputStream fos = new FileOutputStream(file);
|
|
|
// BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER);
|
|
|
// OutputStreamWriter osw = new OutputStreamWriter(bos);
|
|
|
//
|
|
|
// int count;
|
|
|
// char data[] = new char[BUFFER];
|
|
|
//
|
|
|
// while ((count = isr.read(data, 0, BUFFER)) != -1) {
|
|
|
// osw.write(data, 0, count);
|
|
|
// }
|
|
|
// bos.flush();
|
|
|
// bos.close();
|
|
|
// isr.close();
|
|
|
// }
|
|
|
// zipFile.close();
|
|
|
// System.out.println(1);
|
|
|
// } catch (Exception e) {
|
|
|
// e.printStackTrace();
|
|
|
// System.out.println(0);
|
|
|
// return false;
|
|
|
// }
|
|
|
// return true;
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void addFolderToZip(String folderPath, ZipOutputStream zos, String baseFolderPath) throws IOException {
|
|
|
File folder = new File(folderPath);
|
|
|
File[] files = folder.listFiles();
|
|
|
|
|
|
for (File file : files) {
|
|
|
if (file.isDirectory()) {
|
|
|
addFolderToZip(file.getAbsolutePath(), zos, baseFolderPath);
|
|
|
} else {
|
|
|
String entryName = file.getAbsolutePath().replace(baseFolderPath, "");
|
|
|
entryName = entryName.startsWith(File.separator) ? entryName.substring(1) : entryName;
|
|
|
|
|
|
ZipEntry zipEntry = new ZipEntry(entryName);
|
|
|
zos.putNextEntry(zipEntry);
|
|
|
|
|
|
FileInputStream fis = new FileInputStream(file);
|
|
|
byte[] buffer = new byte[1024];
|
|
|
int length;
|
|
|
while ((length = fis.read(buffer)) > 0) {
|
|
|
zos.write(buffer, 0, length);
|
|
|
}
|
|
|
|
|
|
fis.close();
|
|
|
zos.closeEntry();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
public static void addInputStreamToZip(InputStream inputStream, ZipOutputStream zos, String entryName) throws IOException {
|
|
|
|
|
|
ZipEntry zipEntry = new ZipEntry(entryName);
|
|
|
zos.putNextEntry(zipEntry);
|
|
|
byte[] buffer = new byte[1024];
|
|
|
int length;
|
|
|
while ((length = inputStream.read(buffer)) > 0) {
|
|
|
zos.write(buffer, 0, length);
|
|
|
}
|
|
|
inputStream.close();
|
|
|
zos.closeEntry();
|
|
|
}
|
|
|
|
|
|
public static void filesToZip(File srcFile , OutputStream out , String fileName)throws RuntimeException {
|
|
|
|
|
|
long start = System.currentTimeMillis();
|
|
|
ZipOutputStream zos = null ;
|
|
|
try {
|
|
|
zos = new ZipOutputStream(out);
|
|
|
|
|
|
byte[] buf = new byte[BUFFER];
|
|
|
zos.putNextEntry(new ZipEntry(fileName));
|
|
|
int len;
|
|
|
FileInputStream in = new FileInputStream(srcFile);
|
|
|
while ((len = in.read(buf)) != -1){
|
|
|
zos.write(buf, 0, len);
|
|
|
}
|
|
|
zos.closeEntry();
|
|
|
in.close();
|
|
|
|
|
|
long end = System.currentTimeMillis();
|
|
|
} catch (Exception e) {
|
|
|
throw new RuntimeException("zip error from ZipUtils",e);
|
|
|
}finally{
|
|
|
if(zos != null){
|
|
|
try {
|
|
|
zos.close();
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
try {
|
|
|
out.close();
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|