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

Java实现独立文件读取存双数组功能时仅输出最后一行内容的问题排查

问题定位与修复方案

当前代码无法全量打印文件内容,是两处独立逻辑bug叠加导致的,文件读取的主解析流程本身没有错误:

  • 第一处bug:主方法的字符串拼接逻辑完全失效,每次循环都覆盖之前的内容
    你在主方法中的循环代码片段:
for (i = 0; i < pName.length; i++) {  
    outputStr = pName[i] + "," + pPrice[i] + "\n";
}

循环内直接对outputStr做赋值操作,没有追加之前的内容,相当于反复擦写纸面,最后变量里只会留存最后一次循环生成的单行字符串。你现在能看到文件最后一行产品内容,本质是循环停在了有效数据的末尾位置,并没有遍历完全部数组长度。
因为你预设的数组长度为50,实际文件只有3条有效数据,后续47个数组元素是Java默认值:pName对应null,pPrice对应0.0,如果循环跑完全程,最后输出的会是null,0.0这类无效内容,而非有效数据的最后一行。

  • 第二处bug:没有把实际读取的有效数据条数传回主方法
    你在readFromFile方法里用局部变量i统计读入的产品数量,但这个变量是方法内部的临时变量,方法运行结束就会被销毁,主方法完全不知道实际读入了多少条数据,只能盲目遍历整个50长度的数组,既会混入大量无效空值,也没法控制遍历的边界。

优化点补充

  • 文件读取方法中创建的Scanner对象,在读取完成后没有调用sc.close()关闭,存在文件句柄资源泄露,属于代码规范问题
  • 你设置的分隔符",|\r\n"可以正常匹配示例文件的逗号、换行分隔规则,读取解析逻辑本身不需要调整

修正后的参考实现

主方法核心逻辑

// 按预设长度初始化数组
pPrice = new double[50];
pName = new String[50];
int validCount = 0;
StringBuilder outputBuilder = new StringBuilder();
try {
    // 接收文件读取方法返回的有效数据条数
    validCount = readFromFile(pName, pPrice, "products.txt");
} catch (FileNotFoundException e) {
    JOptionPane.showMessageDialog(null, "File cannot be read");
    e.printStackTrace();
}
// 仅遍历有实际数据的数组范围
for (i = 0; i < validCount; i++) {  
    outputBuilder.append(pName[i]).append(",").append(pPrice[i]).append("\n");
}
// 对两个数组完成排序后调用展示方法
display(outputBuilder.toString());

文件读取方法修正

public static int readFromFile(String[] pName, double[] pPrice, String fileName) throws FileNotFoundException {
    File file = new File(fileName);
    Scanner sc = new Scanner(file);
    sc.useDelimiter(",|\r\n");
    int i = 0;
    while (sc.hasNext()) {
        String name = sc.next();
        String cost = sc.next();
        pName[i] = name;
        pPrice[i] = Double.parseDouble(cost);
        i++;
    }
    // 关闭文件扫描器,释放资源
    sc.close();
    // 返回实际读取的有效数据条数
    return i;
}

按上述修正逻辑运行,即可完整打印文件内的全部产品数据,不会再出现仅显示最后一行的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 06:45:04