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

使用BufferedReader读取文件并存储字符串与整数的技术实现问询

正确用BufferedReader读取空格分隔的文本并存储整数/字符串的方案

嘿,我来帮你搞定这个读取文件的问题!你的代码目前有几个关键问题,导致没法正确解析parameters.txt里的内容:

  • reader.read()返回的是单个字符的ASCII码值,不是文件里的数字(比如文件里的'1'读出来是49,不是整数1),这直接让你的cache类型判断失效。
  • 混合调用read()和readLine()会打乱读取指针,导致后续读取的内容完全不符合预期。
  • 你的文件内容是一行内用空格分隔的,应该先读取整行再拆分处理,而不是逐个字符/行读取。

正确实现步骤

我们可以先把文件的整行内容读出来,按空格分割成字符串数组,再分别把对应位置的元素转换成整数或直接保留字符串:

private void storeCacheParams() {
    // 假设parameters是你的文件路径变量
    String parameters = "parameters.txt";
    try (BufferedReader reader = new BufferedReader(new FileReader(parameters))) {
        // 读取整行内容(文件里的1 5 8 wa wb是一行)
        String line = reader.readLine();
        if (line == null) {
            System.err.println("文件为空或读取失败");
            return;
        }
        
        // 按空格分割成字符串数组,\\s+匹配任意数量的空格/制表符
        String[] parts = line.split("\\s+");
        // 确保数组长度符合预期,避免数组越界
        if (parts.length != 5) {
            System.err.println("文件内容格式错误,预期5个参数");
            return;
        }
        
        // 转换并存储整数参数
        int cache = Integer.parseInt(parts[0]);
        if (cache == 1) {
            cacheType = "direct-mapped";
        } else if (cache == 2) {
            cacheType = "2-way set associative";
        } else {
            cacheType = "unknown"; // 处理未知类型,避免逻辑漏洞
        }
        
        offsetBits = Integer.parseInt(parts[1]);
        indexBits = Integer.parseInt(parts[2]);
        
        // 存储字符串参数
        allPol = parts[3];
        writePol = parts[4];
        
        // 打印验证结果
        System.out.println("Cache类型: " + cacheType);
        System.out.println("偏移位数: " + offsetBits);
        System.out.println("索引位数: " + indexBits);
        System.out.println("替换策略: " + allPol);
        System.out.println("写策略: " + writePol);
        
    } catch (FileNotFoundException e) {
        System.err.println("找不到文件: " + parameters);
        e.printStackTrace();
    } catch (NumberFormatException e) {
        System.err.println("数字格式错误,请检查文件中的整数参数");
        e.printStackTrace();
    } catch (IOException e) {
        System.err.println("读取文件时发生IO错误");
        e.printStackTrace();
    }
}

关键细节说明

  • 使用try-with-resources语法:自动关闭BufferedReader,避免资源泄漏,不用手动写close()。
  • split("\\s+"):可以处理多个连续空格的情况,比单纯用split(" ")更鲁棒,适配文件里可能的空格格式。
  • 增加了格式校验:检查数组长度和数字格式,提前拦截异常,避免程序崩溃。
  • 补充了未知cache类型的处理,避免出现未定义的cacheType值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:29:27