import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipFileTest {
ZipOutputStream out = null;
/**
* 创建zip输出流
*
* @param zipFileName
* 压缩后的文件名
* */
public ZipOutputStream buildZipOut(String zipFileName) throws Exception {
out = new ZipOutputStream(new FileOutputStream(zipFileName));
return out;
}
/**
* 关闭zip输出流 必须再压缩完之后关闭,否则后压缩的文件会覆盖前面压缩
* */
public void closeZipOut() {
if (out != null) {
try {
out.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
/**
* 压缩文件,可以由zipFileOrDirector代替
*
* @param file
* 传入的文件
* */
public void zipFile(File file) throws Exception {
FileInputStream in = new FileInputStream(file);
// 创建zip文件条目,相当于产生一个空文件
// 压缩后不带路径
ZipEntry entry = new ZipEntry(file.getName());
// 压缩后带路径,因为传入的文件名中带路径,以至于zip文件条目中也带了目录
// ZipEntry entry = new ZipEntry(this.fileName);
// 开始写入新的 ZIP 文件条目并将流定位到条目数据的开始处
out.putNextEntry(entry);
// 读取文件,并写入到压缩文件
byte[] buffer = new byte[1024];
int i = -1;
while ((i = in.read(buffer)) != -1) {
out.write(buffer, 0, i);
}
// 关闭当前 ZIP 条目并定位流以写入下一个条目
out.closeEntry();
in.close();
// out.close();
System.out.println("压缩完成");
}
/**
* 压缩文件目录
*
* @param fileName
* 传入的文件名
* */
public void zipFileOrDirector(String fileDirector) throws Exception {
File file = new File(fileDirector);
ArrayList<File> files = checkFile(file, new ArrayList<File>());
for (File file2 : files) {
zipFile(file2);
}
out.close();
}
// 检查文件类别,返回文件列表
public ArrayList<File> checkFile(File file, ArrayList<File> list) {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File file2 : files) {
// 递归检查,直到文件不为目录
checkFile(file2, list);
}
} else {
list.add(file);
}
return list;
}
public static void main(String[] args) {
String fileName = "e:/temp/hello";
// System.out.println(new File(fileName).getPath());
ZipFileTest test = new ZipFileTest();
System.out.println("e:/" + new File(fileName).getName() + ".zip");
try {
// test.zipFile(fileName,"e:/"+new File(fileName).getName()+".zip");
// test.zipFileDirector(fileName,"e:/"+new
// File(fileName).getName()+".zip");
String zipFileName = "e:/222222.zip";
test.buildZipOut(zipFileName);
test.zipFileOrDirector(fileName);
test.closeZipOut();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}