java zip压缩优化版 解决压缩后文件一直被占用无法删除
2014-09-22 20:32
477 查看
最近进行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); if(sourceFile.exists() == false) { System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath + " 不存在. <<<<<<"); flag = false; return flag; } else { try { File zipFile = new File(zipFilePath + "/" + fileName + ".zip"); if(zipFile.exists()) { 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=(bis.read(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; } } }
相关文章推荐
- java zip压缩优化版 解决压缩后文件一直被占用无法删除
- Java无法删除被占用资源文件解决办法(IO流的关闭)
- jetty java文件无法删除 java文件占用 delete无效 运行时锁定静态资源的解决方法
- 解决.mdf文件一直被占用无法复制的方法
- java进程占用文件无法删除问题
- JAVA 文件无法删除怪异解决 .delete()无效,但返回true 递归删除文件
- C#解决文件被占用资源,无法删除或修改的方法
- 无法删除Java(TM) Platform SE binary打开问题解决(修改jar中的文件)
- C#解决文件被占用资源,无法删除或修改办法
- “无法删除 文件:无法读源文件或磁盘”-文件夹无法删除的最终而有效的解决方法
- ubuntu下删除U盘文件到回收站无法清空问题的解决
- 文件夹无法访问拒绝访问,无法删除文件的,快速有效解决方法
- c#无法删除文件的解决思路
- 如何解决文件无法删除的情况
- 移动硬盘删除文件时提示“文件或目录损坏且无法读取”的解决方法-chkdsk 命令的巧用
- 解决--oracle oci.dll 文件无法删除
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- java中删除文件老失败的解决办法
- 解决无法删除病毒文件的处理方法
- 解决“无法删除文件:无法读源文件或磁盘”