1

我想将数据写入文本文件。但是,在我的应用程序中,我希望继续将项目写入文本文件(这意味着,我要写入的文本应该附加到文件中 - 而不是每次都创建一个新文件)

我的代码如下;但是下次我在文件中写入内容时如何附加文本?

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()) {.

4

5 回答 5

2
FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);

对 FileWriter 构造函数使用 true 参数。

于 2012-12-14T19:07:35.590 回答
2

您应该FileWriter使用带有额外布尔参数的构造函数创建您的,这表明您要追加。

FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
于 2012-12-14T19:07:41.303 回答
1

检查 api,表示 FileWriter 构造函数需要一个布尔值来标记是否附加。那回答你的问题?

于 2012-12-14T19:06:59.290 回答
1

您永远不会在代码中关闭 FileWriter。并从该类的文档中:

文件是否可用或是否可以创建取决于底层平台。特别是某些平台,允许一次仅由一个 FileWriter(或其他文件写入对象)打开文件以进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造函数将失败。

在退出您的方法之前关闭文件编写器,无论如何它都是很好的做法。是的,如果您不希望每次调用您的方法时文件内容都被吹走,那么一定要以附加模式打开编写器。

于 2012-12-14T19:10:26.280 回答
1

而不是这样做:

FileWriter fw = new FileWriter(file.getAbsoluteFile());

执行以下操作:

FileWriter fw = new FileWriter(file.getAbsoluteFile(),true);

至于附加到现有文件FileWriter需要一个额外的参数作为 true 这里

文件编写器

public FileWriter(File file, boolean append) throws IOException 

在给定 File 对象的情况下构造一个 FileWriter 对象。如果第二个参数为真,那么字节将被写入文件的末尾而不是开头。

参数

file - 要写入的 File 对象

append - 如果为真,那么字节将被写入文件的末尾而不是开头

抛出: IOException - 如果文件存在但是是目录而不是常规文件,不存在但无法创建,或者由于任何其他原因无法打开

自:1.4

于 2012-12-14T19:10:27.747 回答