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.

228 lines
8.1 KiB
Java

2 years ago
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();
}
}
12 months ago
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
2 years ago
}
}
}