javazip压缩优化版解决压缩后⽂件⼀直被占⽤⽆法删除
最近进⾏zip操作,从⽹上到⼀个处理⽅法,但是经过试验存在⼀些bug,主要是⽂件流的申明存在问题,导致jvm⼀直占⽤⽂件⽽不释放,特意把⾃⼰修改的发出来,已备记录
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Zippic {
public final static class FileToZip {
private FileToZip() {
}
/**
* 将存放在sourceFilePath⽬录下的源⽂件,打包成fileName名称的ZIP⽂件,并存放到zipFilePath。
* @param sourceFilePath 待压缩的⽂件路径
* @param zipFilePath 压缩后存放路径
* @param fileName 压缩后⽂件的名称
* @return flag
*/
public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName) {
boolean flag = false;
File sourceFile = new File(sourceFilePath);
ists() == false) {
System.out.println(">>>>>> 待压缩的⽂件⽬录:" + sourceFilePath + " 不存在. <<<<<<");
flag = false;
return flag;
} else {
try {
File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
ists()) {
System.out.println(">>>>>> " + zipFilePath + " ⽬录下存在名字为:" + fileName + ".zip" + " 打包⽂件. <<<<<<");
} else {
File[] sourceFiles = sourceFile.listFiles();
if(null == sourceFiles || sourceFiles.length < 1) {
System.out.println(">>>>>> 待压缩的⽂件⽬录:" + sourceFilePath + " ⾥⾯不存在⽂件,⽆需压缩. <<<<<<");
flag = false;
return flag;
} else {
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
                  //⽤到时才申明,否则容易出现问题,记得先开后关,后开先关
byte[] bufs = new byte[1024*10];              //缓冲块
for(int i=0;i<sourceFiles.length;i++) {
                  // 创建ZIP实体,并添加进压缩包
ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());
zos.putNextEntry(zipEntry);
                // 读取待压缩的⽂件并写进压缩包⾥
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFiles[i]),1024*10);
                  //⽤到时才申明,否则容易出现问题,记得先开后关,后开先关
int read = 0;
while((read=(ad(bufs, 0, 1024*10))) != -1) {
zos.write(bufs, 0, read);
}
if(null != bis) bis.close();  //关闭
}
flag = true;
if(null != zos) zos.close();  //关闭
}
}
文件无法删除怎么办} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
return flag;        }
}
}