java zip 批量打包(java.util包和apache.tools包)

时间:2023-03-08 17:20:20
java zip 批量打包(java.util包和apache.tools包)
/**
* 文件批量打包
* @param zipPath 打包路径
* @param files 批量文件
*/
public void zipOut(String zipPath,File[] files){
byte[] buffer = new byte[1024];
try {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath));
for(int i=0;i<files.length;i++) {
FileInputStream fis = new FileInputStream(files[i]);
out.putNextEntry(new ZipEntry(files[i].getName()));
int len;
//读入需要下载的文件的内容,打包到zip文件
while((len = fis.read(buffer))>0) {
out.write(buffer,0,len);
}
out.closeEntry();
fis.close();
//删除文件,可以不删
files[i].delete();
}
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("生成zip文件成功");
}

以上为java.util包zip的压缩方式,弊端是不能修改编码。下面介绍apache.tools包zip的压缩方式。

/**
* 创建ZIP文件
* @param zipPath 生成的zip文件存在路径(包括文件名)
* @param files 写入的文件
*/
public static void zipOut(String zipPath,File[] files) {
FileOutputStream fos = null;
ZipOutputStream zos = null;
try {
fos = new FileOutputStream(zipPath);
zos = new ZipOutputStream(fos);
writeZip(files, zos);
} catch (FileNotFoundException e) {
System.out.println("创建ZIP文件失败");
} finally {
try {
if (zos != null) {
zos.close();
}
} catch (IOException e) {
System.out.println("创建ZIP文件失败");
} }
}
/**
* 写入内容
* @param files
* @param zos
*/
private static void writeZip(File[] files, ZipOutputStream zos) {
for(int i=0;i<files.length;i++) {
if(files[i].exists()){
FileInputStream fis=null;
DataInputStream dis=null;
try {
fis=new FileInputStream(files[i]);
dis=new DataInputStream(new BufferedInputStream(fis));
ZipEntry ze = new ZipEntry(files[i].getName());
zos.putNextEntry(ze);
//添加编码,如果不添加,当文件以中文命名的情况下,会出现乱码
// ZipOutputStream的包一定是apache的ant.jar包。JDK也提供了打压缩包,但是不能设置编码
zos.setEncoding("GBK");
byte [] content=new byte[1024];
int len;
while((len=fis.read(content))!=-1){
zos.write(content,0,len);
zos.flush();
}
} catch (FileNotFoundException e) {
System.out.println("创建ZIP文件失败");
} catch (IOException e) {
System.out.println("创建ZIP文件失败");
}finally{
try {
if(dis!=null){
dis.close();
}
}catch(IOException e){
System.out.println("创建ZIP文件失败");
}
}
}
}
}