关于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是表示找不到文件,下面的图是报错

我想要达到的结果

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

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

传输过程中特殊字符转码问题?

你把文件放哪了?