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

XSSFWorkbook调用close()方法报找不到符号运行时错误求助

解决XSSFWorkbook找不到close()方法的问题

嘿,我来帮你搞定这个报错!你遇到的cannot find symbol: method close()问题,核心原因是Apache POI版本的差异导致XSSFWorkbook是否支持close()方法有所不同,下面给你具体的解决方案:

为什么会出现这个错误?

在Apache POI的版本迭代中:

  • POI 3.x及更早版本:XSSFWorkbook并没有提供close()方法,这个方法是在POI 4.0之后才被添加到Workbook接口中,由XSSFWorkbook实现的。
  • 如果你当前依赖的是旧版POI,调用workbook.close()自然会找不到这个方法。

具体解决方案

方案1:升级到POI 4.0+版本(推荐)

如果你可以升级POI版本,建议直接升级到4.0或更高版本,这样XSSFWorkbook就支持close()方法了。同时更推荐使用try-with-resources语法,它会自动实现资源的关闭(包括流和workbook),避免手动关闭可能带来的遗漏:

private void createHandBackFile(XSSFSheet sheet, String programId, XSSFWorkbook workbook) throws IOException {
    String output = "C:\\Users\\muddassirr\\Downloads\\Personal\\STORE\\Output";
    File file = new File(output + File.separator + programId);
    if (!file.exists()) {
        file.mkdirs();
    }
    int noOfColumns = sheet.getRow(0).getPhysicalNumberOfCells();
    for(int i = 0; i < noOfColumns; i++) {
        sheet.autoSizeColumn(i);
    }
    // 使用try-with-resources自动管理输出流,无需手动close
    try (FileOutputStream outputStream = new FileOutputStream(
            new File(output + File.separator + programId + File.separator + "HAND_BACK.xlsx"))) {
        workbook.write(outputStream);
    }
    // POI 4.0+中,workbook实现了AutoCloseable,也可以把它加入try-with-resources自动关闭
    // 或者需要手动调用的话,直接workbook.close()即可
}

方案2:保留旧版POI(3.x)的处理方式

如果你无法升级POI版本,只需要移除代码中的workbook.close()调用,换成旧版POI支持的资源释放方式:

  • 如果你是通过输入流创建的XSSFWorkbook,一定要确保关闭那个输入流;
  • 调用workbook.dispose()方法来释放POI内部的底层资源(这个方法在3.x版本中是存在的)。

修改后的代码示例:

private void createHandBackFile(XSSFSheet sheet, String programId, XSSFWorkbook workbook) throws IOException {
    String output = "C:\\Users\\muddassirr\\Downloads\\Personal\\STORE\\Output";
    File file = new File(output + File.separator + programId);
    if (!file.exists()) {
        file.mkdirs();
    }
    int noOfColumns = sheet.getRow(0).getPhysicalNumberOfCells();
    for(int i = 0; i < noOfColumns; i++) {
        sheet.autoSizeColumn(i);
    }
    FileOutputStream outputStream = new FileOutputStream(
            new File(output + File.separator + programId + File.separator + "HAND_BACK.xlsx"));
    workbook.write(outputStream);
    outputStream.close();
    // 替换close()为dispose()来释放资源
    workbook.dispose();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:18:10