48

我编写了以下代码FileWriter

try {
    FileWriter writer = new FileWriter(new File("file.txt"), false);

    String sizeX = jTextField1.getText();
    String sizeY = jTextField2.getText();
    writer.write(sizeX);
    writer.write(sizeY);

    writer.flush();
    writer.close();
} catch (IOException ex) {}

现在我想插入一个新行,就像你\n通常做的那样,但它似乎不起作用。

可以做些什么来解决这个问题?

谢谢你。

4

9 回答 9

71

如果您想获取当前操作系统(如Windows)中使用的换行符,您可以通过以下方式获取它们\r\n

  • System.getProperty("line.separator");
  • 从Java7System.lineSeparator()
  • 或如斯图尔特所述通过以下方式生成它们String.format("%n");

您还可以使用PrintStream它的println方法,它会自动在字符串末尾添加依赖于操作系统的行分隔符

PrintStream fileStream = new PrintStream(new File("file.txt"));
fileStream.println("your data");
//         ^^^^^^^ will add OS line separator after data 

(顺便说一句System.out,也是 PrintStream 的实例)。

于 2013-08-31T15:37:02.460 回答
32

尝试System.getProperty( "line.separator" )

   writer.write(System.getProperty( "line.separator" ));
于 2013-08-31T15:37:27.633 回答
13

尝试将您包装FileWriter在一个BufferedWriter

BufferedWriter bw = new BufferedWriter(writer);
bw.newLine();

BufferedWriter 的 Javadocs 在这里

于 2013-08-31T15:36:36.990 回答
4

从 1.8 开始,我认为这可能是一个值得添加到响应中的额外解决方案:

路径 java.nio.file.Files.write(Path path, Iterable lines, OpenOption... options) throws IOException

StringBuilder sb = new StringBuilder();
sb.append(jTextField1.getText());
sb.append(jTextField2.getText());
sb.append(System.lineSeparator());
Files.write(Paths.get("file.txt"), sb.toString().getBytes());

如果附加到同一个文件,也许使用带有 Files.write() 的 Append 标志

Files.write(Paths.get("file.txt"), sb.toString().getBytes(), StandardOpenOption.APPEND);
于 2016-08-28T23:04:57.183 回答
3

尝试:

String.format("%n");

有关更多详细信息,请参阅此问题

于 2013-08-31T15:33:39.303 回答
3

如果您的意思是使用相同的代码但添加一个新行,那么当您向文件中添加一些内容时,它将位于一个新行上。您可以简单地使用 BufferedWriter 的newLine().
在这里,我还改进了您的代码: NumberFormatException 是不必要的,因为没有任何东西被转换为数字数据类型,保存变量以使用一次也是如此。

try {
    BufferedWriter writer = new BufferedWriter(new FileWriter("file.txt"));
        writer.write(jTextField1.getText());
        writer.write(jTextField2.getText());
        writer.newLine();
        writer.flush();
        writer.close();
} catch (IOException ex) {
    System.out.println("File could not be created");
}
于 2013-08-31T16:23:18.997 回答
1

这里“\n”也可以正常工作。但这里的问题在于文本编辑器(可能是记事本)。尝试使用写字板查看输出。

于 2015-01-26T12:18:04.873 回答
0

我会像这样解决这个问题:

    BufferedWriter output;
    output = new BufferedWriter(new FileWriter("file.txt", true));
    String sizeX = jTextField1.getText();
    String sizeY = jTextField2.getText();
    output.append(sizeX);
    output.append(sizeY);
    output.newLine();
    output.close();

FileWriter 构造函数中的 true 允许追加。
BufferedWriter 提供的方法 newLine()
可以作为解决方案吗?

于 2013-08-31T15:53:57.570 回答
0

可以使用PrintWriter包装FileWriter,因为它有许多其他有用的方法。

try(PrintWriter pw = new PrintWriter(new FileWriter(new File("file.txt"), false))){
   pw.println();//new line
   pw.print("text");//print without new line
   pw.println(10);//print with new line
   pw.printf("%2.f", 0.567);//print double to 2 decimal places (without new line)
}
于 2021-02-23T19:10:54.123 回答