import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 文件压缩
*/
public class CompossFile {
private ZipOutputStream zipOutputStream;
CompossFile(String outFile, String[] FileList) throws IOException {
//zip输出流
zipOutputStream = new ZipOutputStream(new FileOutputStream(outFile));
//压缩文件
for (String path : FileList){
File file = new File(path);
zip(file);
}
zipOutputStream.close();
}
/**
* 文件和空目录压缩
* @param file
* @throws IOException
*/
private void zipFile(File file) throws IOException {
//file为目录是直接添加一个空目录(空目录压缩)
if(file.isDirectory()){
ZipEntry dir = new ZipEntry(file.getPath() + "/");
zipOutputStream.putNextEntry(dir);
zipOutputStream.closeEntry();
}else{
//文件压缩
ZipEntry zipEntry = new ZipEntry(file.getPath() + file.getName());
zipOutputStream.putNextEntry(zipEntry);
BufferedInputStream fileInputStream = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[1024];
while (fileInputStream.read(buffer) != -1){
zipOutputStream.write(buffer);
}
zipOutputStream.closeEntry();
fileInputStream.close();
}
}
/**
* 压缩目录
* @param dir
* @throws IOException
*/
private void zipDir(File dir) throws IOException {
File[] list = dir.listFiles();
//空目录压缩
if(list.length == 0){
zipFile(dir);
}
//递归压缩目录下的文件和目录
for(File file : list){
zip(file);
}
}
/**
* 根据文件种类进行压缩
* @param file
* @throws IOException
*/
private void zip(File file) throws IOException {
if(file.isDirectory()){
zipDir(file);
}else{
zipFile(file);
}
}
}
ZipOutputStream压缩文件和目录
最新推荐文章于 2024-06-21 17:19:33 发布