如何使用BufferedReader同时读取字符串与整数?代码问题排查
关于BufferedReader同时处理字符串与整数的问题及代码排查
能不能用BufferedReader同时处理字符串与整数?
可以。BufferedReader本身只能读取文本内容(字符串形式),但你可以将读取到的字符串通过Integer.parseInt()等方法转换为整数——因为你用BufferedWriter写入整数时,也是先把它转成了字符串(num + "\n"),文件里存储的本质都是文本,所以读取后做类型转换就能同时处理字符串和整数。
你的代码存在的问题
- 写入时的换行符错误:代码里
writer.write(" welcome");和writer.write(num + " ");是直接把换行写在字符串里,这在Java语法中是非法的,应该用转义字符\n,或者更通用的System.lineSeparator()来适配不同操作系统的换行规则,否则写入的文件内容格式会混乱,读取时无法正确按行分割。 - 读取逻辑跳过内容且存在异常风险:你在读取时先执行了
String line = reader.readLine();读取第一行,接着又执行int num = Integer.parseInt(reader.readLine());读取第二行并尝试转成整数,但你写入的第二行是字符串" welcome",这会直接抛出NumberFormatException;同时这一步跳过了第二行内容,后续循环也不会处理它。 - 读取循环逻辑冗余且遗漏内容:你定义的
num变量完全没有被使用,而且循环只处理了第一行和跳过第二行之后的内容,导致第二行丢失。 - 资源未安全关闭:手动调用
close()如果遇到异常,可能会导致流资源没有被正确释放,建议使用Java的try-with-resources语法自动管理资源。
修正后的代码示例
import java.io.*; public class Main { public static void main(String[] args) { int[] nums = {1, 2, 3, 4, 5}; // 写入部分:用try-with-resources自动关闭流,正确处理换行 try (BufferedWriter writer = new BufferedWriter(new FileWriter("test.txt"))) { writer.write("hello"); writer.newLine(); // 用newLine()方法写入适配系统的换行 writer.write("welcome"); writer.newLine(); for (int num : nums) { writer.write(String.valueOf(num)); writer.newLine(); } } catch (IOException e) { e.printStackTrace(); } // 读取部分:按行读取,判断内容是否可转为整数 try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println("读取到内容:" + line); // 尝试将字符串转为整数,处理可能的转换失败 try { int num = Integer.parseInt(line); System.out.println("转换为整数:" + num); } catch (NumberFormatException e) { // 不是整数的情况,跳过或做其他处理 System.out.println("这是字符串,无需转换"); } } } catch (IOException e) { e.printStackTrace(); } } }
内容的提问来源于stack exchange,提问作者user18316205
相关产品推荐
相关产品推荐

