问题遇到的现象和发生背景
正在开发一个读取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测试结果:
上图中的true就是表示文件存在的意思
前端访问结果:
这个false是表示找不到文件,下面的图是报错
我想要达到的结果
想要正确的读取文件,请问怎么解决这个问题