【问题标题】:How do I end line when writing to a text file?写入文本文件时如何结束行?
【发布时间】:2017-11-02 03:11:12
【问题描述】:

我正在写入一个文本文件,但是当我查看该文件时,即使我在 for 循环的字符串中添加了“\n”,所有内容都在线。我忽略了什么?

File file = new File(dir.getAbsolutePath() + "\\SavedJavaArithmetic.txt");

FileWriter fileW = new FileWriter(file);
BufferedWriter buffW = new BufferedWriter(fileW);

for (int i = 0; i < list.size(); i++) {
    buffW.write(list.get(i).toString() + "\n");
}
buffW.close();
fileW.close();

当 for 循环开始时,arraylist "list" 已经创建并填充了。

【问题讨论】:

  • 为什么要遍历一个空列表?这绝对不是你想要的
  • 我刚刚添加了该行以显示有一个数组列表,即使在我的完整代码中它接近开头并且已经填充。
  • 尝试buffw.newLine(),而不是附加"\n"
  • 或者试试:buffW.write(list.get(i).toString() + System.getProperty("line.separator"));

标签: java text-files filewriter bufferedwriter


【解决方案1】:

请编程到List 接口。对于您的问题,请使用System.lineSeparator(),因为"\n" 不是跨平台的(在Windows 上,行分隔符是"\r\n")。接下来,File 提供了两个参数构造函数。还有BufferedWriter.newLine() 可能看起来像

List<String> list = new ArrayList<>();
File file = new File(dir.getAbsolutePath(), "SavedJavaArithmetic.txt");

try (FileWriter fileW = new FileWriter(file);
            BufferedWriter buffW = new BufferedWriter(fileW)) {
    for (int i = 0; i < list.size(); i++) {
        buffW.write(list.get(i));
        buffW.newLine();
    }
}

或者,使用PrintWriter(它提供更自然的语法)。而且,我会使用for-each 循环。 另外,在这两种情况下,我都会使用try-with-resources 来处理close(s)。将所有这些放在一起可能看起来像,

List<String> list = new ArrayList<>();
// ...
File file = new File(dir.getAbsolutePath(), "SavedJavaArithmetic.txt");
try (PrintWriter pw = new PrintWriter(file)) {
    for (String str : list) {
        pw.println(str);
    }
}

并且,在 Java 8+ 中,使用 StreamforEachOrdered 类似

List<String> list = new ArrayList<>();
File file = new File(dir.getAbsolutePath(), "SavedJavaArithmetic.txt");
try (PrintWriter pw = new PrintWriter(file)) {
    list.stream().forEachOrdered(pw::println);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 2012-12-29
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2011-11-09
    • 1970-01-01
    相关资源
    最近更新 更多