Java类中BufferedWriter在驱动代码中无法输出的修复方案咨询
问题修复方案
核心问题及修复步骤:
- BufferedWriter未刷新缓冲区,导致菜单无法显示
BufferedWriter是带缓冲的输出流,调用write()后内容会暂存于缓冲区,不会立刻输出到控制台。必须手动调用flush()强制刷新缓冲区,才能让用户看到菜单内容。
修改AdminView的main方法,在写完所有菜单选项后添加flush操作:
writer.write("0. Exit\n"); writer.write("1. View news\n"); writer.write("2. View personal info\n"); writer.write("3. Change password\n"); writer.write("4. Create user\n"); writer.flush(); // 新增该行,强制输出缓冲区内容 String ans = reader.readLine();
- Switch Case缺少break语句,导致执行多个分支
当前switch的每个case后都没有break,选择任意选项后会依次执行后续所有case的代码(比如选1会连续执行viewNews、viewPersonalInfo、changePassword、createUser所有方法)。需要给每个case添加break:
switch(ans){ case "0": return; case "1": viewNews(); break; // 新增 case "2": viewPersonalInfo(); break; // 新增 case "3": changePassword(); break; // 新增 case "4": createUser(); break; // 新增 default: writer.write("无效选项,请重新输入\n"); writer.flush(); // 可选:添加默认分支提示用户 }
- 字符串换行符的规范写法
原代码里的换行直接写在字符串中,建议用\n或者System.lineSeparator()保证跨平台兼容性,比如把"0. Exit\n"替换为"0. Exit" + System.lineSeparator()。
额外建议
- 程序退出时可以关闭reader和writer资源,避免资源泄漏,比如在return前添加
reader.close(); writer.close();(需处理IOException)。 - 保留switch的default分支,处理用户输入无效选项的情况,提升交互体验。
内容的提问来源于stack exchange,提问作者Chingis Bagdatov
相关产品推荐
相关产品推荐

