package com.prac.zip;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
*
* 类说明:压缩多文件工具类
*/
public class GenerateZipUtil {
private static Logger log = Logger.getLogger(GenerateZipUtil.class);
public static void main(String[] args) {
String files[] = { "/app/123.txt", "/app/哈哈.txt" };
String zipFile2 = "/app/1234哈哈.zip";
try {
boolean flag2 = reduceFiles(files, zipFile2);
System.out.println("flag2=" + flag2);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 方法说明:
* 多文件压缩
* @param files 多文件名
* @param zipfile 压缩文件名
* @return
* @throws Exception
*/
public static boolean reduceFiles(String[] files, String zipfile) throws Exception {
if (log == null)
log = Logger.getLogger("export");
boolean bf = true;
// 根据文件路径构造一个文件实例
File ff = new File(zipfile);
// 判断目前文件是否存在,如果不存在,则新建一个
if (!ff.exists()) {
ff.createNewFile();
}
// 根据文件路径构造一个文件输出流
FileOutputStream out = new FileOutputStream(zipfile);
// 传入文件输出流对象,创建ZIP数据输出流对象
ZipOutputStream zipOut = new ZipOutputStream(out);
// 循环待压缩的文件列表
for (int i = 0; i < files.length; i++) {
File f = new File(files[i]);
if (!f.exists()) {
bf = false;
log.error("GenerateZipUtil.java Method: reduceFiles files["+i+"] = " + files[i] + ",zipfile =" + zipfile + " 文件不存在");
}
FileInputStream in = null;
try {
// 创建文件输入流对象
in = new FileInputStream(files[i]);
// 得到当前文件的文件名称
String fileName = files[i].substring(files[i].lastIndexOf('/') + 1, files[i].length());
// 创建指向压缩原始文件的入口
ZipEntry entry = new ZipEntry(fileName);
zipOut.putNextEntry(entry);
// 向压缩文件中输出数据
int nNumber = 0;
boolean isZipFlag = false;
byte[] buffer = new byte[512];
while ((nNumber = in.read(buffer)) != -1) {
zipOut.write(buffer, 0, nNumber);
isZipFlag = true;
}
// 关闭创建的流对象(只有关闭流,后面才能进行删除文件)
if (in != null) {
in.close();
}
//删除临时文件(临时文件在压缩包里,就不需要备份到文件夹下)
boolean delFile = false;
if (f.isFile()) {
delFile = f.getAbsoluteFile().delete();
}
log.info("GenerateZipUtil.java Method: reduceFiles files = " + files + ",zipfile =" + zipfile + ",文件压缩状态:"+isZipFlag+",删除文件状态:" + delFile );
} catch (IOException e) {
log.error("GenerateZipUtil.java Method: reduceFiles files = " + files + ",zipfile =" + zipfile + ",error:",e);
bf = false;
}
}
zipOut.close();
out.close();
return bf;
}
}
多文件进行zip压缩
最新推荐文章于 2024-08-08 07:23:52 发布