我想在文件中多行写一个文件。例如:
第一行: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();
我该如何解决这个问题?
答案 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();
}
}