Java中使用FileWriter写入List<String>仅存首词,如何正确实现?
如何正确将List写入文本文件?
你生成了单词列表[the, of, value, v, key, to, given, a, k, map],尝试写入文件时遇到了两类问题:仅写入首个单词、重复写入每个单词,下面先分析问题原因,再给出正确实现。
问题原因分析
第一段FileWriter代码的错误
遍历单词的for循环中,每次写完一个单词就调用writer.close(),这会直接关闭文件输出流,后续单词无法再写入,因此仅输出了第一个单词。关闭流的操作必须放在循环之后,确保所有内容写入完成再释放资源。
第二段BufferedWriter代码的错误
嵌套了不必要的双层循环:外层遍历每个单词,内层又循环列表长度次,导致当前单词被重复写入topTenPercentlist.size()次,最终每个单词都重复出现。
正确实现方案
方案1:修正后的FileWriter写法
使用try-with-resources语法自动管理资源(无需手动关闭流),把关闭操作移到循环外:
try (FileWriter writer = new FileWriter("stopwordslist.txt")) { for (String word : topTenPercentlist) { writer.write(word + System.lineSeparator()); } System.out.println("数据成功写入文本文件"); } catch (IOException e) { e.printStackTrace(); System.out.println("写入文本文件失败..."); }
方案2:高效的BufferedWriter写法
BufferedWriter自带缓冲,适合大文件写入,用newLine()方法换行更清晰:
try (BufferedWriter writer = new BufferedWriter(new FileWriter("stopwordslist.txt"))) { for (String word : topTenPercentlist) { writer.write(word); writer.newLine(); } System.out.println("数据成功写入文本文件"); } catch (IOException e) { e.printStackTrace(); System.out.println("写入文本文件失败..."); }
方案3:Java 8+ 极简写法(推荐)
利用java.nio.file.Files的静态方法,一行代码完成写入,自动处理换行和资源:
import java.nio.file.Files; import java.nio.file.Paths; import java.nio.charset.StandardCharsets; // ... try { Files.write(Paths.get("stopwordslist.txt"), topTenPercentlist, StandardCharsets.UTF_8); System.out.println("数据成功写入文本文件"); } catch (IOException e) { e.printStackTrace(); System.out.println("写入文本文件失败..."); }
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

