所以我想用Java创建和写入一个文件。我知道怎么用一行来做,但我想知道如何将多行写入单个文件。
import java.io.FileWriter;
import java.io.BufferedWriter;
public class WritingToAFile {
public static void main(String[] args) {
try{
FileWriter fstream = new FileWriter ("P:/Computer Science/greeting.txt");
BufferedWriter info = new BufferedWriter(fstream);
for(int i = 1; i < 6; i++){
info.write("Hello");
info.newLine();
info.write("Bonjour");
info.newLine();
info.write("Guten tag");
info.newLine();
info.write("Aloha");
info.newLine();
info.write("Nihao");
info.close();
}catch(Exception e){
System.out.println("A write error has occurred");
}
}
}
我现在知道它错了,但我不确定我做错了什么。非常感谢帮助!我只是一个初学者,所以我真的输了。
答案 0 :(得分:4)
你关闭了每次迭代的文件 - qmake -spec macx-xcode project.pro
- 这就是你有异常的原因。完成写入后,您需要关闭文件。
info.close();
方法没有错。但是,您可以使用换行符来缩短它。
newLine();
- 是基于Unix的系统的新行分隔符。
"\n"
- 是Windows系统的新行分隔符。
"\r\n"
是一个独立于平台的新行分隔符。
"%n"
第二个问题是你没有关闭for(int i = 1; i < 6; i++) {
info.write(String.format("Hello%n"));
}
info.close();
。
如果您使用的是Java 7+,我建议您使用FileWriter
来删除try-with-resources
块:
finally
文件输出:
public class Main {
public static void main(String[] args) {
try (FileWriter fstream = new FileWriter("greeting.txt");
BufferedWriter info = new BufferedWriter(fstream)) {
for (int i = 1; i < 6; i++) {
info.write(String.format("Hello%n"));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
<强>更新强>
所有输入输出操作都需要处理流,通道,文件描述符(例如Hello
Hello
Hello
Hello
Hello
,FileWriter
)。应仔细关闭这些流以释放系统资源。如果不这样做可能会导致资源泄漏。尽管您已关闭BufferedWriter
,但您忘记在代码中关闭info
。
正确使用fstream
语句后,您将永远不必显式关闭流。 try-with-resources
语句确保在语句结束时关闭每个资源。
答案 1 :(得分:1)
你几乎做对了,事实上,它与info.newLine();
无关,而是代码的语法。
您的catch
实际上是在for
循环之后,并未与try
相关联。
您还可以在for
循环中关闭该流,而不是在完成后关闭该流(这会导致IOException
)。
样品:
try {
FileWriter fstream = new FileWriter("P:/Computer Science/greeting.txt");
BufferedWriter info = new BufferedWriter(fstream);
for (int i = 1; i < 6; i++) {
info.write("Hello");
info.newLine();
info.write("Bonjour");
info.newLine();
info.write("Guten tag");
info.newLine();
info.write("Aloha");
info.newLine();
info.write("Nihao");
}
info.close();
} catch (Exception e) {
System.out.println("A write error has occurred");
}
答案 2 :(得分:0)
在write方法的字符串末尾添加基于系统的\n
或\r\n
平台新行字符
try{
for(int i = 1; i < 6; i++){
info.write("Hello\n");
info.write("Bonjour\n");
...
}
}
catch (Exception e) {
System.out.println("A write error has occurred");
}
finally{
info.close();
}