You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

223 lines
8.0 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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();
}
}
}
}
}