将一些文本写入文件 - 例外

时间:2012-12-14 19:04:06

标签: java filewriter bufferedwriter

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

我的代码如下;但是,下次我在文件中写一些东西时,我怎么能附加文字呢?

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

5 个答案:

答案 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