如何将Java文件读取代码从Scanner替换为BufferedReader
问题1:是否需要重写全部代码
不需要全量重写,仅替换你标记的Scanner相关逻辑段即可,后续的字段校验、Request对象封装逻辑完全可以复用,不需要调整。
正确的改造代码示例
将你标记的代码段替换为以下内容即可:
// 注意如果需要指定文件编码,建议用InputStreamReader替代FileReader避免乱码 try(BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(this.getFile()), StandardCharsets.UTF_8))){ String lineContent = br.readLine(); // 判断文件是否为空 if(lineContent == null){ throw new BarsException(BarsException.NO_REQUESTS_TO_READ); } // 循环处理所有行,因为第一行已经提前读了做非空判断,所以用do-while结构 do { // 可选:加空行跳过逻辑,避免文件中间的空行导致校验报错 if(lineContent.isBlank()){ continue; } rowCounter++; String[] contentArray = lineContent.split(","); String billingCycle = contentArray[indexSetter.billing_Cycle.getValue()]; String startDate = contentArray[indexSetter.start_Date.getValue()]; String endDate = contentArray[indexSetter.end_Date.getValue()]; // 这里直接接你原来的校验、封装逻辑即可,不需要修改
500错误排查方案
按照优先级依次排查:
- 先看应用后台控制台的异常堆栈信息,确认抛出的异常类型:
- 如果是
FileNotFoundException:检查this.getFile()返回的文件路径是否正确,是否有读取权限 - 如果是
BarsException:确认读取出来的行内容是否乱码、是否符合格式要求 - 如果是
NullPointerException:检查是否读到空行未处理、或者split后的数组下标越界
- 如果是
- 解决编码问题:默认
FileReader用操作系统默认编码读取文件,如果你的文件是UTF-8等非系统默认编码,会出现乱码导致格式校验失败,用上面示例里的InputStreamReader指定编码即可解决 - 先做单元测试:单独给
readFile方法写单元测试,传入确定符合格式的本地文件,验证方法本身逻辑正常后,再通过Postman调用接口,排除接口参数传递、文件上传解析等上层逻辑的问题
内容的提问来源于stack exchange,提问作者Keiyonkun
相关产品推荐
相关产品推荐

