java删除文件时总是返回false,删不掉的解决方案

 更新时间:2021年09月09日 16:38:40   作者:fangguozi  
这篇文章主要介绍了java删除文件时总是返回false,删不掉的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

java删除文件时总是返回false,删不掉

今天写了个简单的文件删除的程序:代码如下:

public static boolean deleteFiles(File[] files){
  boolean flag = false;
  for(File file:files){
   // 路径为文件且不为空则进行删除  
      if (file.isFile() && file.exists()) { 
       flag = file.delete();
        System.out.println(flag);
      }
  }
  return flag;
 }

我的文件都是存在的,但是就是经常性的删不了,不知道怎么回事,我单独测试的时候是可以的,感觉很是奇怪,上网查,人家说是可能的情况有:

  • 1、多线程操作
  • 2、打开的文件流没有关闭
  • 3、需要垃圾回收下

我的解决

分析下我的情况,我的是单线程的,所以第一种情况不存在,第二种情况我关闭我所有打开的文件流但是还是不行,后来我在程序中加了行System.gc();,结果就真的可以了,一下是修改后的:

public static boolean deleteFiles(File[] files){
  boolean flag = false;
  for(File file:files){
   // 路径为文件且不为空则进行删除  
      if (file.isFile() && file.exists()) {  
       System.gc(); //加上确保文件能删除,不然可能删不掉
       flag = file.delete();
       System.out.println(flag);
      }
  }
  return flag;
 }

java文件删除不了的坑,特别是压缩文件

我们在用java删除文件的时候通常直接调用file.delete();方法就行了,但是很多情况下却删除不了

下面列举一些情况

  • 1、是文件夹且不为空,这个没什么好说的,可以先删除文件夹里的文件再删除这个文件夹
  • 2、被别的进程占用,这不仅java不能删,就算windows手动删也删不了
  • 3、跟这个文件的流没有关闭,这个是最常见的原因了

然而我遇到的是上传一个文件,然后跟这个文件有关的流也关闭了,还是删除不了,后来发现有人把这个文件偷偷的转换成zip压缩文件了。

然后删除这个bookFile死活删除不了,如果出现这种情况,这个zipFile最后一定要close;

java.util.zip.ZipFile.close()方法关闭ZIP文件

关闭此ZIP文件将关闭以前由调用getInputStream()方法返回的所有输入流。这个方法连流都给我们关闭了!就不用我们手动关闭zip文件的流了,最后在调用file.delete()方法就可以删除文件了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • spring-shiro权限控制realm实战教程

    spring-shiro权限控制realm实战教程

    这篇文章主要介绍了spring-shiro权限控制realm实战教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java处理日期时间的方法汇总

    Java处理日期时间的方法汇总

    这篇文章主要给大家介绍了利用Java中的Calendar 类处理日期时间的方法汇总,其中包括取日期的每部分、取当月的第一天或最后一天、求两个日期之间相隔的天数以及一年前的日期等等的示例代码,有需要的朋友们可以直接参考借鉴,下面来一起看看吧。
    2016-12-12
  • SpringSecurity获取当前登录用户的信息的几种方法实现

    SpringSecurity获取当前登录用户的信息的几种方法实现

    本文主要介绍了SpringSecurity中获取当前登录用户信息的多种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Java从入门到精通之旅类和对象全面解析

    Java从入门到精通之旅类和对象全面解析

    Java是一门纯面向对象的语言(OOP),在面向对象的世界里,一切皆为对象,面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情,这篇文章主要介绍了Java从入门到精通之旅类和对象全面解析,需要的朋友可以参考下
    2025-04-04
  • servlet3文件上传操作

    servlet3文件上传操作

    这篇文章主要介绍了servlet3文件上传操作的相关资料,需要的朋友可以参考下
    2017-11-11
  • SpringBoot内部调用事务不起作用问题的解决方案

    SpringBoot内部调用事务不起作用问题的解决方案

    这篇文章主要介绍了SpringBoot事务不起作用问题的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java实现十进制与二进制互转的示例详解

    Java实现十进制与二进制互转的示例详解

    这篇文章主要为大家详细介绍了Java如何实现十进制与二进制的互转,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下
    2022-11-11
  • EL表达式的隐式对象_动力节点Java学院整理

    EL表达式的隐式对象_动力节点Java学院整理

    这篇文章主要介绍了EL表达式的隐式对象,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Spring JdbcTemplate整合使用方法及原理详解

    Spring JdbcTemplate整合使用方法及原理详解

    这篇文章主要介绍了Spring JdbcTemplate整合使用方法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • springcloud gateway聚合swagger2的方法示例

    springcloud gateway聚合swagger2的方法示例

    这篇文章主要介绍了springcloud gateway聚合swagger2的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论