永无止境。。 2022-03-20 00:32 采纳率: 33.3%
浏览 419

关于java.io.FileNotFoundException: (No such file or directory)的问题

问题遇到的现象和发生背景

正在开发一个读取excel表格里的数据的功能,但是获取文件时报错了,关键是用junit测试的时候是好的,只有从前端访问的时候才会报错,一开始怀疑是中文乱码的问题,于是把文件名改成英文,还是不行。后来怀疑是tomcat的问题,但是不知道问题出在哪里,求解。

问题相关代码,请勿粘贴截图

主体开发代码:

public String ExcelAnalysis(@RequestBody String s) {

        try {
             //读取文件
            //File file = new File("src/main/webapp/uploads/一线系统列表-V6.0-20220318.xls");
            File file = new File("src/main/webapp/uploads/20220318_1.xls");
            //查看文件是否存在
            System.out.println(file.exists());

            InputStream fileInputStream = new FileInputStream(file);
            //后面的内容都不太重要了
            String name = file.getName();
            Workbook wb = null;
            String fileType = name.substring(name.lastIndexOf("."));
            if ((".xls").equals(fileType)) {
                wb = new HSSFWorkbook(fileInputStream);  //2003-
            } else if ((".xlsx").equals(fileType)) {
                wb = new XSSFWorkbook(fileInputStream);  //2007+
            } else {
                System.out.println("文件格式错误!");
            }
            Sheet sheet = wb.getSheetAt(2);
            HashSet<Integer> hashSet = new HashSet<>();
            for (Row cells : sheet) {
                for (Cell cell : cells) {
                    if (cell.toString().contains(s)) {
                        hashSet.add(cells.getRowNum());
                    }
                }
            }

            for (Row cells : sheet) {
                for (Cell cell : cells) {
                    for (Integer integer : hashSet) {
                        if (cells.getRowNum() == integer) {
                            System.out.print(cell.toString() + " ");
                        }
                    }
                }
                System.out.println();
            }
            fileInputStream.close();
            wb.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "success";
}

junit测试代码:

    @Test
    public void ExcelAnalysisTest1(){
        FIndSystemController fIndSystemController = new FIndSystemController();
        fIndSystemController.ExcelAnalysis("逻辑");
    }

前端ajax访问:

function FinSystem() {
            var val = $("#systemname").val();
            $.post("findSystem/excelAnalysis", {
                    s: val
                },
                function (data, status) {
                    alert("数据: \n" + data + "\n状态: " + status);
                }, "json");
        }
运行结果及报错内容

junit测试结果:

img


上图中的true就是表示文件存在的意思

前端访问结果:

img

img


这个false是表示找不到文件,下面的图是报错

我想要达到的结果

想要正确的读取文件,请问怎么解决这个问题

  • 写回答

3条回答 默认 最新

  • 星空是梦想 2022-03-20 01:56
    关注

    推荐使用现成的excel工具读取和写入文件,如alibaba的easyexcel,很好用的

    评论

报告相同问题?

问题事件

  • 创建了问题 3月20日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价