我想将数据写入文本文件。但是,在我的应用程序中,我将继续将文章写入文本文件(这意味着,我想写的文本应该附加到文件中 - 而不是每次都创建一个新文件)
我的代码如下;但是,下次我在文件中写一些东西时,我怎么能附加文字呢?
1。)以下代码的问题是,第一次写入文件,但是当我第二次尝试写入时,我得到以下异常;
java.io.IOException: Stream closed
2。)我希望能够写入同一个文件,直到应用程序关闭。因此,如何在应用程序关闭时关闭Stream?
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class WriteToFileExample {
public void writeToFile(String stuff) {
try {
File file = new File("../somefile.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile(),true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(stuff);
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
更新1
private File file;
public WriteToFileExample(){
file = new File("../somefile.txt");
}
public void writeToFile(String stuff) {
try {
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(stuff);
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
异常
Exception in thread "main" java.lang.NullPointerException
at com.proj.example.Log.WriteToFile(WriteToFileExample.java:3)
指向if (!file.exists()) {
。
答案 0 :(得分:2)
FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
使用FileWriter构造函数的true参数。
答案 1 :(得分:2)
您应该使用the contructor that takes an extra boolean argument创建FileWriter
,表示您要追加。
FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
答案 2 :(得分:1)
检查api,说FileWriter构造函数接受一个布尔值来标记是否追加。那回答你的问题?
答案 3 :(得分:1)
您永远不会在代码中关闭FileWriter。并从该课程的文档:
文件是否可用或是否可以创建取决于 底层平台。特别是某些平台允许文件 仅通过一个FileWriter(或其他文件写入)打开写入 对象)一次。在这种情况下,这个类中的构造函数 如果涉及的文件已经打开,则会失败。
在退出方法之前关闭文件编写器,无论如何都是好的做法。是的,如果您不希望每次调用方法时文件内容都被吹走,那么肯定会在追加模式下打开编写器。
答案 4 :(得分:1)
而不是这样做:
FileWriter fw = new FileWriter(file.getAbsoluteFile());
执行以下操作:
FileWriter fw = new FileWriter(file.getAbsoluteFile(),true);
至于附加现有文件FileWriter需要额外的参数为true
FileWriter的
public FileWriter(File file, boolean append) throws IOException
在给定File对象的情况下构造FileWriter对象。如果第二个参数为true,那么将是字节 写到文件的末尾而不是开头。
<强>参数强>:
file - 要写入
的File对象append - 如果为true,则字节为 写到文件的末尾而不是开头
<强>抛出:强> IOException - 如果文件存在但是是目录而不是目录 常规文件,不存在但不能创建,或不能 因任何其他原因而被打开
自: 1.4