Java文本文件追加写入换行及程序循环问题求助
解决Java文件写入时的循环问题与换行异常
嘿,我来帮你搞定这两个问题!你遇到的程序循环和记录不换行的情况,都是代码里的几个小细节出错导致的,咱们一步步来修正:
问题根源分析
1. 输入读取错误导致“莫名循环”
你创建了3个独立的Scanner对象来读取输入,这本身就会造成输入流的管理混乱;更关键的是,读取手机号时你写错了对象:
// 错误:用读取last name的LN来读手机号,此时LN的输入流已被消耗,会导致程序等待输入,看起来像循环 String num = LN.nextLine();
而且多个Scanner共享同一个标准输入流,很容易出现读取阻塞,表现为程序“卡住循环”。
2. 未添加换行指令导致记录堆积
你写入文件时只拼接了||分隔符,但没有添加换行操作,所以所有新写入的内容都会挤在同一行,不会自动换行。
修正后的完整代码
我把代码优化了一下,解决了这两个问题,同时还优化了资源管理:
import java.io.BufferedWriter; import java.io.FileWriter; import java.util.Scanner; public class CoachRecordWriter { public static void main(String[] args) { // 只创建一个Scanner实例,复用标准输入流,避免冲突 Scanner scanner = new Scanner(System.in); // 读取用户输入 System.out.print("Enter First name: "); String firstName = scanner.nextLine(); System.out.print("Enter Last name: "); String lastName = scanner.nextLine(); System.out.print("Enter Number: "); String phoneNumber = scanner.nextLine(); // 使用try-with-resources自动关闭流,无需手动调用close(),更安全 try (BufferedWriter writer = new BufferedWriter(new FileWriter("D:\\Second year\\OOP\\Coach1.txt", true))) { // 拼接一条完整记录,最后写入换行符 writer.write(firstName + "||" + lastName + "||" + phoneNumber); writer.newLine(); // 自动适配系统的换行规则(Windows是\r\n,Linux是\n) } catch (Exception e) { // 打印具体异常信息,方便排查问题,而不是模糊提示 e.printStackTrace(); } finally { // 关闭Scanner资源 scanner.close(); } } }
关键修改点说明
- 单一Scanner实例:只用一个
Scanner处理所有输入,避免输入流冲突,同时修正了手机号读取的对象错误,彻底解决“循环”问题。 - 自动资源管理:用
try-with-resources语法,BufferedWriter会在代码块结束后自动关闭,避免资源泄漏。 - 强制换行:每条记录写入后调用
writer.newLine(),确保新记录自动换行,而且这个方法会根据操作系统自动选择合适的换行符,比直接写"\n"更通用。 - 更友好的异常处理:把模糊的
System.out.println("Error!")改成e.printStackTrace(),能看到具体的异常原因,方便后续排查。
现在你再运行程序,每次输入的记录都会单独占一行,重启程序输入新内容也不会覆盖原有数据,而且不会再出现莫名循环的情况啦!
内容的提问来源于stack exchange,提问作者James Pearce
相关产品推荐
相关产品推荐

