Filewriter 不会将文本附加到新创建的文件
Filewriter will not append text to newly created file
我是 Java 的新手。如果 "List:" 不存在,我试图将其添加到新文本文件的开头。相反,文本文件是空白的,输入下面是一行空白 space。
File hi = new File("hi.txt");
try{
if(!hi.exists()){
System.out.printf("\nCreating 'hi.txt'.");
hi.createNewFile();
String hello = "List:";
new FileWriter(hi).append(hello);
}
else{
System.out.printf("\nWriting to 'hi.txt'");
}
FileWriter writeHere = new FileWriter(hi, true);
String uling = "hi";
writeHere.append(uling);
writeHere.close();
}
//error catching
catch(IOException e){
System.out.printf("\nError. Check the file 'hi.txt'.");}
将 true 作为第二个参数传递给 FileWriter 以打开 "append" 模式(在您创建的第一个 FileWriter 中)。
此外,您应该创建变量 FileWriter
,并在附加 "List:" 后关闭它,因为您离开了该变量的范围。
所以,我将按如下方式编辑代码:
File hi = new File("hi.txt");
try {
if (!hi.exists()) {
System.out.printf("\nCreating 'hi.txt'.");
hi.createNewFile();
String hello = "List:";
FileWriter writer = new FileWriter(hi, true);
writer.append(hello);
writer.close();
} else {
System.out.printf("\nWriting to 'hi.txt'");
}
FileWriter writeHere = new FileWriter(hi, true);
String uling = "hi";
writeHere.append(uling);
writeHere.close();
}
//error catching
catch (IOException e) {
System.out.printf("\nError. Check the file 'hi.txt'.");
}
注意: 第 7-9 行 的修改.
http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html
这一行有问题:
new FileWriter(hi).append(hello);
您没有关闭编写器,这意味着:
- 文件句柄可能仍处于打开状态,这可能会在您尝试写入时导致问题
- 您没有刷新 作者,因此输入可能会丢失
你也应该养成使用try-with-resources获取并自动关闭writer的习惯,即使出现异常。
就个人而言,我会稍微更改您的代码结构,以便您只打开文件一次:
File hi = new File("hi.txt");
boolean newFile = !hi.exists();
System.out.printf("%n%s 'hi.txt'.", newFile ? "Creating" : "Writing to");
try (Writer writer = new FileWriter(hi, true)) {
// Note: if you've already got a string, you might as well use write...
if (newFile) {
writer.write("List:");
}
writer.write(uling);
}
catch(IOException e) {
System.out.printf("\nError. Check the file 'hi.txt'.");
}
重要的是不要忘记关闭作者。嗯,不关闭就不会写了
writer.close()。
我是 Java 的新手。如果 "List:" 不存在,我试图将其添加到新文本文件的开头。相反,文本文件是空白的,输入下面是一行空白 space。
File hi = new File("hi.txt");
try{
if(!hi.exists()){
System.out.printf("\nCreating 'hi.txt'.");
hi.createNewFile();
String hello = "List:";
new FileWriter(hi).append(hello);
}
else{
System.out.printf("\nWriting to 'hi.txt'");
}
FileWriter writeHere = new FileWriter(hi, true);
String uling = "hi";
writeHere.append(uling);
writeHere.close();
}
//error catching
catch(IOException e){
System.out.printf("\nError. Check the file 'hi.txt'.");}
将 true 作为第二个参数传递给 FileWriter 以打开 "append" 模式(在您创建的第一个 FileWriter 中)。
此外,您应该创建变量 FileWriter
,并在附加 "List:" 后关闭它,因为您离开了该变量的范围。
所以,我将按如下方式编辑代码:
File hi = new File("hi.txt");
try {
if (!hi.exists()) {
System.out.printf("\nCreating 'hi.txt'.");
hi.createNewFile();
String hello = "List:";
FileWriter writer = new FileWriter(hi, true);
writer.append(hello);
writer.close();
} else {
System.out.printf("\nWriting to 'hi.txt'");
}
FileWriter writeHere = new FileWriter(hi, true);
String uling = "hi";
writeHere.append(uling);
writeHere.close();
}
//error catching
catch (IOException e) {
System.out.printf("\nError. Check the file 'hi.txt'.");
}
注意: 第 7-9 行 的修改.
http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html
这一行有问题:
new FileWriter(hi).append(hello);
您没有关闭编写器,这意味着:
- 文件句柄可能仍处于打开状态,这可能会在您尝试写入时导致问题
- 您没有刷新 作者,因此输入可能会丢失
你也应该养成使用try-with-resources获取并自动关闭writer的习惯,即使出现异常。
就个人而言,我会稍微更改您的代码结构,以便您只打开文件一次:
File hi = new File("hi.txt");
boolean newFile = !hi.exists();
System.out.printf("%n%s 'hi.txt'.", newFile ? "Creating" : "Writing to");
try (Writer writer = new FileWriter(hi, true)) {
// Note: if you've already got a string, you might as well use write...
if (newFile) {
writer.write("List:");
}
writer.write(uling);
}
catch(IOException e) {
System.out.printf("\nError. Check the file 'hi.txt'.");
}
重要的是不要忘记关闭作者。嗯,不关闭就不会写了
writer.close()。