使用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
相关产品推荐
相关产品推荐

