0

と を使用して、数行の文字列をファイルに書き込む必要がある単純なプログラムがありFileWriterますBufferedWriter。ファイルから(この場合)まったく同じデータを既に読み取り、ランタイムメモリに保存しますが、書き込みを完全に拒否し、理由がわかりません。通常、私はそれをデバッグして何が起こっているのかを確認しようとしますが、何を探しているのかわかりません。

これが私のコードです:

public void close () {
    FileWriter output = null;
    BufferedWriter fileOut = null;

    // I use the exact same method to read from file so this should work
    // this.prajituri :: ArrayList
    // toString is @Override

    try {
        output = new FileWriter(this.fileName);
        fileOut = new BufferedWriter(output);

        for (int i = 0; i < this.prajituri.size(); i++) {
            fileOut.write(prajituri.get(i).toString());
            System.out.println(prajituri.get(i).toString());
            fileOut.newLine();
        }
    } catch (IOException ioe) {
        System.out.println("Output error: " + ioe);
    } finally {
        if (fileOut != null)
            fileOut = null;
        if (output != null)
            output = null;
    }
}

念のため、ここに私のtoStringがあります:

@Override
public String toString () {
    return this.name + ";" + this.weight + ";" + this.price;
}

ファイルに書き込もうとするたびに、空のファイルが返されます。私は何か間違っていますか?

はチェックしましたが、this.prajituri実際には良好です(必要なすべてのデータがあります)。それでも何も書かない。System.out.println(prajituri.get(i).toString())

4

4 に答える 4

4

BufferedWriterを閉じる必要があります fileOut.close()

于 2013-01-07T16:57:33.667 に答える
2

ストリームをディスクに書き込むには、ストリームをフラッシュする必要があります。

java.io.FileWriter でのフラッシュ

を呼び出して、ストリームを適切に閉じる必要がありますfileout.close()(とにかく内部的にフラッシュを呼び出します)。

于 2013-01-07T16:58:08.963 に答える
2

すぐにディスクに書き込むには:

output.flush();

それが終わったら:

output.close();

close( )含むflush( )

于 2013-01-07T16:58:15.933 に答える
1

ストリームをフラッシュ/閉じる必要があります。Java SE 7 を使用している場合、最も簡単な方法は、新しい自動リソース管理機能を使用することです。

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

于 2013-01-07T17:05:03.270 に答える