1

テキストファイルにデータを書き込みたい。しかし、私のアプリケーションでは、アイテムをテキストファイルに書き続けたいと思います(つまり、書きたいテキストをファイルに追加する必要があり、毎回新しいファイルを作成する必要はありません)

私のコードは次のとおりです。しかし、次回ファイルに何かを書き込むときに、どうすればテキストを追加できますか?

1.) 以下のコードの問題は、最初はファイルに書き込みますが、2 回目に書き込もうとすると、次の例外が発生します。

java.io.IOException: Stream closed

2.) アプリケーションが閉じられるまで同じファイルに書き込めるようにしたい。したがって、アプリケーションが閉じているときにストリームを閉じるにはどうすればよいですか?

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

コード内で FileWriter を閉じることはありません。そしてクラスのドキュメントから:

ファイルが使用可能かどうか、またはファイルを作成できるかどうかは、基盤となるプラットフォームによって異なります。特に、一部のプラットフォームでは、一度に 1 つの 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 オブジェクトを構築します。2 番目の引数が true の場合、バイトはファイルの先頭ではなく末尾に書き込まれます。

パラメータ:

file - 書き込み先の File オブジェクト

append - true の場合、バイトはファイルの先頭ではなく末尾に書き込まれます

例外: IOException - ファイルは存在するが通常のファイルではなくディレクトリである場合、存在しないが作成できない場合、またはその他の理由で開くことができない場合

以降: 1.4

于 2012-12-14T19:10:27.747 に答える
1

APIを確認すると、FileWriterコンストラクターはブール値を使用して、追加するかどうかにフラグを立てることがわかります。それはあなたの質問に答えますか?

于 2012-12-14T19:06:59.290 に答える