使用Apache POI读取XLSX单元格触发FileNotFoundException如何修复
问题修复方案
你遇到的报错是标准的文件找不到异常,核心问题是代码中配置的文件路径和实际文件的存储路径/名称不匹配:代码中写的是/tmp/table.xlsx,但程序运行时实际查找的是/tmp/таблица.xlsx,两者文件名不一致。
修复步骤
- 第一步:确认实际文件名称
执行终端命令ls /tmp/*.xlsx,查看/tmp目录下所有xlsx格式文件的准确名称,确保和代码中填写的名称完全一致,注意大小写、特殊字符、空格都会影响路径匹配。 - 第二步:修正代码中的路径配置
如果实际文件名为俄文的таблица.xlsx,将代码中文件初始化的行替换为:File excel = new File("/tmp/таблица.xlsx"); - 第三步:增加路径合法性校验(建议添加)
在创建文件输入流前添加路径校验逻辑,提前捕获路径问题:// 校验文件是否存在 if (!excel.exists()) { System.out.println("文件不存在,实际查找路径为:" + excel.getAbsolutePath()); return; } // 校验文件是否可读 if (!excel.isFile() || !excel.canRead()) { System.out.println("文件无读取权限,请检查权限配置"); return; } - 第四步:优化资源关闭逻辑(建议添加)
用try-with-resources语法自动管理流关闭,避免资源泄漏,修改后的完整代码如下:import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class miniwolfi { public static void main(String[] args) throws IOException { File excel = new File("/tmp/таблица.xlsx"); // 提前校验路径合法性 if (!excel.exists()) { System.out.println("文件不存在,实际查找路径为:" + excel.getAbsolutePath()); return; } if (!excel.isFile() || !excel.canRead()) { System.out.println("文件无读取权限,请检查权限配置"); return; } // try-with-resources自动关闭流 try (FileInputStream fis = new FileInputStream(excel); XSSFWorkbook wb = new XSSFWorkbook(fis)) { double result = wb.getSheetAt(0).getRow(0).getCell(0).getNumericCellValue(); System.out.println(result); } } }
内容的提问来源于stack exchange,提问作者Александр Томсон
相关产品推荐
相关产品推荐

