解决file.delete老是失败的问题,批量删除文件夹下的文件

2023-12-27 11:08

本文主要是介绍解决file.delete老是失败的问题,批量删除文件夹下的文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

file.delete有时会失败,解决

解决file.delete失败问题

最近在项目中遇到是要FIle的delete方法后,文件一直删除不了,经排查,是当时刚好有文件处于读取状态(可能是文件夹里面直接读取或是java程序后台读取使用InputStreamReader或BufferedOutputStream这种流没有关闭)

解决:在调用这个delete之前使用system.gc()使用java垃圾回收,通知虚拟机希望进行一次垃圾回收,注意:这里并不一定会马上执行垃圾回收,至于什么时候进行回收还是取决于虚拟机,而且也不能保证一定进行回收

这里我是要删除这个文件夹下所有文件,所以使用for循环,由于不确定什么时候虚拟机会进行垃圾回收,所以循环了10次去遍历执行

for (String file : filels) {File fl = new File(file);final boolean result = false;int tryCount = 0;while (!result && tryCount++ < 10) {System.gc();fl.delete();}
}

批量删除某个文件夹下的所有文件

后面觉得效率很低,如果我有1000个文件删除这个去循环太慢了,后面找到一种直接使用window或linux底层命令去执行删除,这个效率会快很多,Runtime和Process都是jdk自带的包(我用的是1.8版本),不用额外引入(url是你传入的需要删除的文件地址)

logger.info("开始删除文件,地址:"+url);
Runtime runtime = Runtime.getRuntime();
// linux版本:String[] args = new String[] {"sh", "-c", "rm -f -r /usr/dir"};
// window版本String[] arg = new String[] {"cmd.exe", "/c", "rd D:\\a\\20210101 /q /s"};
String[] arg = new String[] { "cmd.exe", "/c", "rd " + url + " /q /s" };
try {Process proc = runtime.exec(arg);
} catch (IOException e) {e.printStackTrace();
}

大家可以试试,有问题评论区见!

这篇关于解决file.delete老是失败的问题,批量删除文件夹下的文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/542926

相关文章

JAVA Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

Python列表的创建与删除的操作指南

《Python列表的创建与删除的操作指南》列表(list)是Python中最常用、最灵活的内置数据结构之一,它支持动态扩容、混合类型、嵌套结构,几乎无处不在,但你真的会创建和删除列表吗,本文给大家介绍... 目录一、前言二、列表的创建方式1. 字面量语法(最常用)2. 使用list()构造器3. 列表推导式

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可