Java实现saveWorksToFile方法:使用for循环写入作品数据到文件
问题修复方案
你现有代码的核心问题不是换行方法无效,而是缺少了多段必要输出逻辑:
- 写完作品数量行后未换行,也没有输出要求的分割线
-----及对应换行 - 完全没有实现作品列表的遍历输出逻辑
- 没有匹配规则处理作品行的换行(最后一行作品不能加换行,无作品时分割线末尾要加换行)
修复后完整方法代码
public void saveWorksToFile(Writer writer) { try { BufferedWriter buffer = new BufferedWriter(writer); // 输出第一行:艺术家姓名 buffer.write(this.name); buffer.newLine(); // 输出第二行:作品数量 buffer.write("works: " + this.works.size()); buffer.newLine(); // 输出第三行:分割线 buffer.write("-----"); if (this.works.isEmpty()) { // 无作品场景:分割线末尾加换行 buffer.newLine(); } else { // 有作品场景:分割线后先换行,再输出作品 buffer.newLine(); for (int i = 0; i < works.size(); i++) { buffer.write(works.get(i).toString()); // 仅非最后一个作品末尾加换行 if (i != works.size() - 1) { buffer.newLine(); } } } // 刷出缓冲区内容,避免内容残留没写入 buffer.flush(); buffer.close(); } catch (IOException e) { System.out.println("IOException occurred"); } }
逻辑说明
- 统一用
newLine()输出换行,自动适配不同操作系统的换行符规范,比硬编码\n兼容性更好 - 无作品场景严格匹配规则:只输出前三行,分割线末尾加换行
- 有作品场景严格控制换行:除了最后一个作品,其余每一行内容末尾都加换行,完全符合输出要求
- 调用
flush()保证缓冲区所有内容都写出到目标writer,避免因为缓冲区没满导致内容丢失
内容的提问来源于stack exchange,提问作者HY2000
相关产品推荐
相关产品推荐

