讲师中心 微信公众号
AI工具推荐 视频效率加速

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

落敏君_3464

落敏君_3464

发布时间:2026-01-20 22:34:02

|

641人浏览过

|

来源于php中文网

原创

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

在 java 中将 json 转为 excel 后无法删除源 json 文件,通常是因为 `filereader` 未正确关闭,导致文件句柄被占用;使用 try-with-resources 自动管理资源可彻底避免该问题。

在您提供的代码中,核心问题在于这一行:

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

此处直接将 FileReader 作为参数传入 parser.parse(),但未显式关闭流。FileReader 是基于操作系统文件句柄的资源,若未及时释放,Windows 系统会锁定该文件(表现为 FileSystemException: The process cannot access the file because it is being used by another process),导致后续 Files.deleteIfExists() 失败。

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

Excel Auto Clean
Excel Auto Clean

自动整理Excel表格、去重、排序、生成报表

下载
JSONParser parser = new JSONParser();
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);
}

⚠️ 其他需同步修复的关键点(否则仍可能引发资源泄漏或并发问题):

  • 避免静态流对象:当前代码中 public static FileInputStream fi; 和 public static FileOutputStream fo; 被声明为 static,不仅违背面向对象设计原则,还极易引发多线程/多轮执行时的资源冲突。应改为局部变量;
  • Excel 写入后务必关闭 FileOutputStream:您已在 fo.close() 前调用 fo.flush(),这是正确的,但建议同样用 try-with-resources 封装:
    try (FileOutputStream fo = new FileOutputStream(dir + "//DB_Search" + "-" + formatedate + ".xlsx")) {
        wb.write(fo);
    }
  • JSON 文件写入也应安全关闭:当前使用 PrintWriter 写入 JSON,虽已调用 out.close(),但建议同样采用 try-with-resources 防御异常中断导致未关闭:
    try (PrintWriter out = new PrintWriter(new FileWriter(".//Json_files//db-" + stockname + ".json", true), true)) {
        out.write(resp.asString());
    }

? 总结与最佳实践:

  • 所有实现 AutoCloseable 的资源(FileReader, FileWriter, PrintWriter, FileInputStream, FileOutputStream, Workbook 等)都应优先使用 try-with-resources;
  • 避免 static 流字段——它们生命周期过长、状态共享,是资源泄漏和线程不安全的温床;
  • 删除文件前可增加诊断逻辑(非必须,但便于调试):
    Path jsonPath = Paths.get(".//Json_files//db-" + stockname + ".json");
    if (!Files.exists(jsonPath)) {
        System.out.println("JSON file does not exist: " + jsonPath);
    } else if (!Files.isWritable(jsonPath)) {
        System.out.println("JSON file is not writable — may be locked or permission denied.");
    }

遵循以上改进后,JSON 文件将在解析完成即刻释放,Files.deleteIfExists() 将稳定执行成功,彻底解决“文件被占用”异常。

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

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

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

1975

2023.08.07

json是什么
json是什么

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

2702

2023.08.23

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

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

936

2023.10.13

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

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

3019

2025.09.10

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

5295

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

302

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

304

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

203

2026.04.17

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

80

2026.09.23

热门下载

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

精品课程

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

共162课时 | 43.4万人学习

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

共28课时 | 3.5万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn