You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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错误排查方案

按照优先级依次排查:

  1. 先看应用后台控制台的异常堆栈信息,确认抛出的异常类型:
    • 如果是FileNotFoundException:检查this.getFile()返回的文件路径是否正确,是否有读取权限
    • 如果是BarsException:确认读取出来的行内容是否乱码、是否符合格式要求
    • 如果是NullPointerException:检查是否读到空行未处理、或者split后的数组下标越界
  2. 解决编码问题:默认FileReader用操作系统默认编码读取文件,如果你的文件是UTF-8等非系统默认编码,会出现乱码导致格式校验失败,用上面示例里的InputStreamReader指定编码即可解决
  3. 先做单元测试:单独给readFile方法写单元测试,传入确定符合格式的本地文件,验证方法本身逻辑正常后,再通过Postman调用接口,排除接口参数传递、文件上传解析等上层逻辑的问题

内容的提问来源于stack exchange,提问作者Keiyonkun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:27:02