0

0

如何解决“文件正被另一个进程使用”导致的删除失败问题

心靈之曲

心靈之曲

发布时间:2026-01-20 23:31:02

|

450人浏览过

|

来源于php中文网

原创

如何解决“文件正被另一个进程使用”导致的删除失败问题

本文详解在java中因文件流未正确关闭而导致`filesystemexception: the process cannot access the file because it is being used by another process`异常的根本原因,并提供基于try-with-resources的安全读写实践,确保json文件可被顺利删除。

在使用Apache POI处理Excel、结合JSON解析生成报表的自动化流程中,一个常见却易被忽视的问题是:成功写入JSON文件后无法删除它。错误提示如 java.nio.file.FileSystemException: ... The process cannot access the file because it is being used by another process,其本质并非系统级进程占用,而是Java自身未释放对文件的句柄(File Handle)——最典型的原因就是 FileReader(或其他输入流)未显式关闭。

回顾原始代码片段:

Object obj = parser.parse(new FileReader(".//Json_files//db-" + stockname + ".json"));

该行直接将 FileReader 作为参数传入 parser.parse(),但 JSONParser.parse() 方法不会自动关闭传入的Reader。这意味着文件流持续处于打开状态,JVM持有操作系统级别的文件锁,导致后续 Files.deleteIfExists() 调用失败。

✅ 正确做法:使用 try-with-resources 语句,确保 FileReader 在解析完成后自动、可靠关闭:

Runwayml(AI painting)
Runwayml(AI painting)

Runway 平台的文本生成图像AI工具

下载
Object obj;
try (FileReader reader = new FileReader(".//Json_files//db-" + stockname + ".json")) {
    obj = parser.parse(reader); // 解析完成后 reader 自动关闭
} catch (IOException | ParseException e) {
    throw new RuntimeException("Failed to parse JSON file: " + stockname, e);
}

⚠️ 同时需注意其他潜在资源泄漏点:

  • PrintWriter out 虽已调用 out.close(),但建议也改用 try-with-resources 更安全;
  • 全局静态流字段(如 public static FileInputStream fi;)极易引发跨测试用例的资源冲突,应避免使用静态流对象,改为方法内局部声明+及时释放;
  • XSSFWorkbook wb 是内存中工作簿,不直接关联文件锁,但若在循环中反复创建未销毁(尤其未调用 wb.close()),可能引发内存溢出或临时文件残留。

? 完整修复建议(关键段落优化):

// ✅ 安全写入 JSON
try (PrintWriter out = new PrintWriter(new FileWriter(".//Json_files//db-" + stockname + ".json", true))) {
    out.write(resp.asString());
} // 自动关闭

// ✅ 安全读取并解析 JSON
Object obj;
try (FileReader reader = new FileReader(".//Json_files//db-" + stockname + ".json")) {
    obj = parser.parse(reader);
} catch (IOException | ParseException e) {
    throw new RuntimeException("JSON parsing failed for " + stockname, e);
}

// ✅ 解析后立即删除(此时文件已无任何流占用)
Path jsonPath = Paths.get(".//Json_files//db-" + stockname + ".json");
if (Files.exists(jsonPath)) {
    Files.delete(jsonPath); // 或 Files.deleteIfExists()
}

? 额外验证技巧:

  • 在删除前添加 System.out.println("Can delete? " + Files.isWritable(jsonPath)); 辅助诊断;
  • Windows 用户可用 Process Explorer 搜索文件名,确认是否仍有 Java 进程持有着该文件句柄。

? 总结:Java 中“文件被占用”的90%以上场景源于开发者未遵循 "open → use → close" 的资源管理铁律。try-with-resources 不仅是语法糖,更是防止资源泄漏、保障文件操作原子性的必备实践。务必对所有 InputStream, OutputStream, Reader, Writer, Connection, Statement 等实现 AutoCloseable 的对象启用该机制。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

453

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

331

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

287

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

222

2023.12.29

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1431

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1163

2023.07.27

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 20.4万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号