You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apache POI写入Excel重复执行遇FileNotFoundException求助

问题分析与解决方案

这个报错的核心原因很明确:第一次执行脚本后,Excel文件相关的IO资源(比如文件流、工作簿对象)没有被完全释放,导致操作系统锁定了文件,第二次执行时无法再次打开写入。另外也有可能是第一次运行后,你手动打开了生成的Excel文件却没关闭,导致脚本无法访问文件。

下面给你几个针对性的解决办法:

1. 用try-with-resources自动管理资源(推荐)

Java 7及以上支持的try-with-resources语法会自动关闭实现了AutoCloseable接口的资源,不用手动写finally块,能彻底避免资源泄漏。比如用Apache POI操作xls的代码可以写成这样:

// 写入或追加数据的逻辑
try (FileOutputStream fos = new FileOutputStream("TestResultData2.xls");
     HSSFWorkbook workbook = new HSSFWorkbook()) {
    // 这里写你的数据写入逻辑,比如找到空行、填充数组
    // ...
    // 最后把工作簿写入流
    workbook.write(fos);
} catch (IOException e) {
    e.printStackTrace();
}

如果是要追加数据到已有文件,需要先读取现有工作簿,代码如下:

try (FileInputStream fis = new FileInputStream("TestResultData2.xls");
     HSSFWorkbook workbook = new HSSFWorkbook(fis);
     FileOutputStream fos = new FileOutputStream("TestResultData2.xls")) {
    // 找到最后一行空行的逻辑
    Sheet sheet = workbook.getSheetAt(0);
    int lastRowNum = sheet.getLastRowNum();
    Row newRow = sheet.createRow(lastRowNum + 1);
    // 填充你的数据数组到newRow
    // ...
    workbook.write(fos);
} catch (IOException e) {
    e.printStackTrace();
}

2. 手动在finally块关闭所有资源(兼容旧Java版本)

如果你的项目用的是Java 6及以下,必须手动在finally块中关闭流和工作簿,注意要分别捕获关闭时的异常,避免一个资源关闭失败导致其他资源无法关闭:

FileOutputStream fos = null;
HSSFWorkbook workbook = null;
try {
    workbook = new HSSFWorkbook();
    // 数据写入逻辑
    // ...
    fos = new FileOutputStream("TestResultData2.xls");
    workbook.write(fos);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    // 先关闭文件流
    if (fos != null) {
        try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 再关闭工作簿
    if (workbook != null) {
        try {
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 排除外部进程占用

每次执行脚本前,确保TestResultData2.xls没有被其他程序打开(比如你的电脑上手动打开了这个Excel文件没关),这种情况下操作系统会锁定文件,脚本肯定无法写入。

按照上面的方法调整代码后,应该就能解决第二次执行报错的问题了。

内容的提问来源于stack exchange,提问作者bc14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:53:49