版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenshibailian/article/details/84784114
//生成的压缩文件的路径
public String compressFile(String resource,String target){
try {
//要压缩的文件或文件夹
File res = new File(resource);
//压缩文件生成的目录
File tar = new File(target);
//如果目标路径不存在,则新建
if(!tar.exists()){
tar.mkdirs();
}
String targetName = res.getName()+".zip";//压缩文件名
//文件写入工作流
FileOutputStream outputStream = new FileOutputStream(target+File.separator+targetName);
//压缩文件写入工作流
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream));
//具体的压缩文件实现过程
createZipFile(out, res, "");
out.close();
//返回压缩文件的路径
return target+File.separator+targetName;
} catch (Exception e) {
e.printStackTrace();
LOG.error("压缩文件生成失败!!", e);
return null;
}
}
生成压缩文件的实际操作 :
//将文件或文件夹压缩
public void createZipFile(ZipOutputStream out,File resourceFile,String dir){
try {
//如果是文件夹的话遍历文件夹
if(resourceFile.isDirectory()){
//得到该文件夹下的所有文件
File[] files = resourceFile.listFiles();
//将文件夹添加到下一级打包目录
out.putNextEntry(new ZipEntry(dir+File.separator));
dir=dir.length()==0?"":dir+File.separator;
//循环将文件夹中的文件打包
for(int i=0;i<files.length;i++){
createZipFile(out,files[i],dir+files[i].getName());
}
}else{//如果是文件的或将文件压缩
//文件读取工作流
FileInputStream fis = new FileInputStream(resourceFile);
out.putNextEntry(new ZipEntry(dir));
//写文件内容写入压缩文件中
int j=0;
byte[] buffer = new byte[1024];
while((j=fis.read(buffer))>0){
out.write(buffer, 0, j);
}
//关闭文件流
fis.close();
}
} catch (Exception e) {
e.printStackTrace();
LOG.error("压缩文件失败!!", e);
}
}