博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java zip压缩优化版 解决压缩后文件一直被占用无法删除
阅读量:6408 次
发布时间:2019-06-23

本文共 2116 字,大约阅读时间需要 7 分钟。

最近进行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

  

 

转载于:https://www.cnblogs.com/allforone/p/3986682.html

你可能感兴趣的文章
java rmi spring 4.0_Java Spring RMI一些尝试
查看>>
JAVA怎么连接华为的HDFS系统_JAVA-API操作HDFS文件系统(HDFS核心类FileSystem的使用)...
查看>>
java牛客网四则运算_数据库刷题—牛客网(51-61)
查看>>
Java get set6_JDK6的新特性(转)
查看>>
java发送邮件 不登陆_Java邮件到Exchange Server“不支持登录方法”
查看>>
编程学习初体验(5. 如何自学编程)(2)
查看>>
思科ISR G1与ISR G1C的区别
查看>>
利用perl提取web配置文件中的域名对应的路径
查看>>
Centos5上安装JRE和LUMAQQ
查看>>
关于监控工具的主动发起性能测试
查看>>
我的友情链接
查看>>
OpenSSL学习(十六):基础-指令rand
查看>>
KeyMob致力于打造国内领先的移动广告平台
查看>>
路由选路原则
查看>>
jvm 学习(一)
查看>>
JavaScript简介
查看>>
SQL Server附加数据库拒绝访问解决方法汇总
查看>>
SM2算法原理及实现
查看>>
RHCA教材翻译计划
查看>>
js-小括号在不同场合下的作用
查看>>