3

BufferedWriter を使用してテキスト ファイルに書き込んでいますが、実行中のプログラムが終了するまで BufferedWriter はファイルに書き込みません。これが私が持っている私のコードの一部です:

FileWriter fw = null;
try {
    fw = new FileWriter("C:/.../" + target + ".pscr",true);
    writer = new BufferedWriter(fw);
    writer.write(target);
    writer.newLine();
    writer.write(Integer.toString(listOfFiles.length));
    writer.newLine();
    for(int i=0; i < listOfFiles.length; i++){
        writer.write(probeArray[i] + "\t" + probeScoreArray[i]);
        writer.newLine();                               
    }                           
}
catch (IOException e1) {e1.printStackTrace();}
catch (RuntimeException r1) {r1.printStackTrace();}
finally {
    try {
        if(writer != null){
            writer.flush();
            writer.close();
        }
    }
    catch (IOException e2) {e2.printStackTrace();}
}

BufferedWriter をフラッシュしますが、書き込むとすぐにファイルがありませんが、代わりにプログラムが終了したときです。助言がありますか?

4

3 に答える 3

3

flush()呼び出しをtryブロックに移動する必要があります。たとえば、すべてのnewLine()呼び出しの後。

とは言っても、flush()infinallyclose()すでに暗黙的に呼び出しているため不要です。

于 2010-02-17T22:58:17.923 に答える
0

バッファリングを完全にスキップします:

そのままではすべての行全体を印刷するだけなので、上記の例では、すべての行の書き込み後にフラッシュ呼び出しが行われるため、PrintWriterよりも優れた利点が失われます。
ここで説明されているように:http://java.sun.com/javase/6/docs/api/java/io/BufferedWriter.html

PrintWriter pw = null;
try {
    pw = new PrintWriter(new FileWriter("C:/.../" + target + ".pscr", true), true);
    pw.println(target);
    pw.println(Integer.toString(listOfFiles.length));
    for(int i=0; i < listOfFiles.length; i++)
        pw.println(probeArray[i] + "\t" + probeScoreArray[i]);
}

最終更新
コンストラクPrintWriter(Writer out, boolean autoFlush)ターを呼び出しました。これは、Javadocによると、次の動作をします。

autoFlush - if true, the println, printf, or format methods will flush the output buffer

これがうまくいかない場合、私は何が起こるかわかりません。

于 2010-02-17T23:21:54.173 に答える