近期在项目中,需要压缩文件,同时压缩文件后需要删除源文件,

public static boolean fileToZip(String sourceFilePath,String zipFilePath,String zipFileName){
    boolean flag = false;File sourceFile = new File(sourceFilePath);FileInputStream fis = null;BufferedInputStream bis = null;FileOutputStream fos = null;ZipOutputStream zos = null;if (!sourceFile.exists()){
        log.error("待压缩的文件目录,sourceFilePath={},不存在",sourceFilePath );}else {
        try {
            File zipFile = new File(zipFilePath + File.separator + zipFileName + ".zip");if (zipFile.exists()){
                log.error("文件已存在,zipFile={}",zipFile );} else {
                File[] files = sourceFile.listFiles();if (files != null && files.length > 0){
                    fos = new FileOutputStream(zipFile);zos = new ZipOutputStream(new BufferedOutputStream(fos));byte[] bufs = new byte[1024*10];for (File file : files) {
                        //创建zip实体并添加进压缩包
                        ZipEntry zipEntry = new ZipEntry(file.getName());zos.putNextEntry(zipEntry);//读取待压缩的文件, 并写进压缩包
                        fis = new FileInputStream(file);bis = new BufferedInputStream(fis,1024*10);int read = 0;while ((read = bis.read(bufs,0 ,1024*10 )) != -1){
                            zos.write(bufs,0 ,read );}
                        //这句一开始没有,
                        bis.close();}
                    flag = true;}

            }
        } catch (Exception e) {
            e.printStackTrace();} finally {

            //关闭流
            if (bis != null) {
                try {
                    bis.close();} catch (IOException e) {
                    e.printStackTrace();}
            }
            if (zos != null) {
                try {
                    zos.close();} catch (IOException e) {
                    e.printStackTrace();}
            }
            File[] files = sourceFile.listFiles();for (File file : files) {
                //删除源文件
                file.delete();}

        }

    }

    return flag;
}

刚开始一直删不掉,也判断是流没有关闭,后来在大佬提示下,

                        fis = new FileInputStream(file);bis = new BufferedInputStream(fis,1024*10);

才明白,我的这两个流,因为是在循环体里面放的,会造成堆栈的孤岛问题, 我每次循环一次就新建了一个input流,导致之前的input流成为栈内存中的孤岛,没有被GC回收,占用了文件,才会一直删不掉,后来在 循环体中 加上

bis.close();

bingo,问题解决

思考: 对于基础的堆栈的不熟悉,导致了这个问题卡了我一下午,有空还是应该多看看java的基础,不能觉得基础不重要!!!!

关于压缩文件后删除源文件的一点问题相关推荐

  1. python 利用脚本命令压缩加密文件并删除源文件

    python自身有一个比较好的包 tarfile以及zipfile都可以压缩文件,但是当我们需要加密压缩文件的时候,这两个包无法提供,根据官方资料 zipfile的setpassword 是无法设置密 ...

  2. 压缩文件后,每次的HASH值(MD5)都不相同的原因

    ■前言 使用工具生成的压缩文件,解压后 文件内容一样,但是每次压缩文件的HASH值不一样 ■原因 压缩文件,包含被压缩文件的时间信息 使用工具生成时, 每次文件都是新创建的, 尽管文件内容相同,但是文 ...

  3. 解决在mac上压缩文件后,在window上解压后多个__MACOSX文件夹

    前言:何为MACOSX? 网上是这样定义的: MACOSX,这是一个基于UNIX核心的系统,增强了系统的稳定性.性能以及响应能力.它能通过对称多处理技术充分发挥双处理器的优势,提供无与伦比的2D.3D ...

  4. Java zip 压缩 文件夹删除,移动,重命名,复制

    FileUtil.java import java.io.*; import java.util.List; import java.util.zip.ZipEntry; import java.ut ...

  5. linux怎么vi文件后删除空行,Vim 如何删除或替换空行空格

    Vim 是一款强大的编辑器,是vi的增强版,在编辑器界是神器一样的存在! Vim 日常实用中我们经常会用到需要删除空行或替换空格的操作,那么在Vim中如何通过命令快速实现呢? 仔细看下面命令: 一行文 ...

  6. JS实现表单多文件上传样式美化支持选中文件后删除相关项

    http://www.youdaili.net/javascript/5903.html 转载于:https://www.cnblogs.com/as3lib/p/6816264.html

  7. java 中导出word后压缩文件_Java批量导出word压缩后的zip文件案例

    一.js代码,由于参数比较大所以利用form表单使用post导出 function export_word(){ var selectedRows = $("#dg").datag ...

  8. 压缩文件目录 linux,linux_压缩文件及目录

    压缩解压缩命令: 压缩格式:gz,bz2,xz,zip,z 压缩算法:算法不同,压缩比也会不同: compress::FILENAME.Z uncompress 目前最流行的压缩工具: gzip: . ...

  9. 使用java对html源代码(拼装、可获取页面源代码)转换为(html页面,doc文档文件,pdf格式),doc文件转换成为pdf,文件的删除、压缩功能

    目录: 1.转换成为html页面 2.html源代码转换成为doc文件 3.html源代码转换成为pdf文件 4.压缩多个文件成为一个zip文件 5.对文件进行删除 实施过程: A.html页面的实现 ...

最新文章

  1. java连接各数据库的语句
  2. 生产环境可以用吗_小型熔喷布设备可以生产出好的熔喷布吗?
  3. 【CodeForces - 255A】Greg's Workout (水题)
  4. css 相同的css属性_CSS中的order属性
  5. 项目alpha冲刺-总结
  6. 【opencv学习】【Canny边缘检测】
  7. sysbench相关
  8. 【Elasticsearch】基于儿童积木玩具图解 Elasticsearch 聚合
  9. 构建高性能数据库缓存之redis主从复制
  10. 超实用的mysql分库分表策略,轻松解决亿级数据问题
  11. mysql-8.0.14图文安装_mysql8.0.14安装配置方法图文教程(通用)
  12. Node.js入门(二)
  13. MySQL — 利用命令:获取系统当前时间、打开系统服务、Mysql命令界面快速回到之前的语句
  14. 在线代码图片生成工具carbon
  15. 京东商品列表API接口-(item_search-按关键字搜索京东商品API接口),京东API接口
  16. 浅谈二维码门禁在互联网的时代特色
  17. [NOIP模拟测试37]反思+题解
  18. 谁能引爆大数据?答案是“位置大数据”
  19. 添加打印机时提示:未安装打印机驱动,试图将打印机添加到存储区时遇到问题
  20. Python中求矩阵的逆

热门文章

  1. HP tank 519 设置无边距卡纸
  2. 企业群发短信时为什么要找短信平台公司而不是直接找运营商发送
  3. 进制的转换 如六进制
  4. 离谱的bug564v*/92ray
  5. 完美的alert美化
  6. C语言-小写转换大写
  7. 服务器进系统后键盘鼠标一卡一卡的,windows10系统鼠标卡顿的处理方法
  8. 一种具有17路可调PWM直流电机的串口遥控机器人
  9. vue中用echarts 绘制geo 中国地图
  10. 读完这本书打通了“数据化运营”的任督二脉