在文件中写入多个字符串行

时间:2014-04-25 13:39:16

标签: java

我想在文件中多行写一个文件。例如:

第一行:a b c d e f g h i
第二行:j k l m n o p q r
第三行:s t u v w x y z 1

但是我制作的代码不能这样做。每次我尝试写入它时,它只打印在一行上。这是我的代码:

FileOutputStream write = new FileOutputStream ("file.txt");
PrintStream print = new PrintStream (write);

BufferedReader in = new BufferedReader(new FileReader(data));
String read;



while ((read = in.readLine()) != null) {
    String[] splited = read.split("\n");
    for (int z = 0; z<splited.length; z++){

        print.print(splited[z]+" ");

    }

}
print.println();

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您需要在while循环中移动print.println()。

正确的方法如下:

  while ((read = in.readLine()) != null) {
                    String[] splited = read.split("\n");
      for (int z = 0; z<splited.length; z++){

          print.print(splited[z]+" ");

       }
       print.println();  // correct place for println
  }

答案 1 :(得分:0)

首先,readLine读取一行,直到换行,因此无需调用split("\n"),因为它总是返回字符串本身。

其次,您永远不会在输出文件中写入换行符,因此最终会将所有行都展开为一行。您只需将行print.print(splited[z] + " ");修改为print.print(splited[z] + "\n");

即可

答案 2 :(得分:0)

我已经通过几种方式更改了您的代码,以提高可读性和性能。

  • 我现在使用的是BufferedWriter而不是PrintStream,它有一种编写换行符的好方法。
  • 我正在使用try-with-resources。这是一个Java 7+功能,可以自动关闭连接,流和缓冲区。在您当前的代码中,我没有看到您关闭了读者或作者。对于这么小的程序来说这不是什么大问题,但关闭它们是一种好习惯。
  • 我使用了for循环而不是while循环。这是我接受的一个很好的技巧,它使我免于在比我需要的范围更高的范围内定义read(范围 - 蠕变)。

-

try (BufferedWriter writer = new BufferedWriter(new FileWriter("file.txt"));
     BufferedReader reader = new BufferedReader(new FileReader(data)))
{
    for (String read = reader.readLine(); read != null; read = reader.readLine()) {
        writer.append(read);
        writer.newLine();
    }
}