3

ファイル名「aq.txt」に何かを書き込もうとしています。ディレクトリに問題はありません。

FileOutputStream fos= null;
try{
    String xyz= "You should stop using xyz";
    fos= new FileOutputStream("aq.txt");
    Writer wrt= new BufferedWriter(new OutputStreamWriter(fos));
    wrt.write(xyz);
}    
catch(IOException e){
    System.out.println("Couldn't write to the file: "+e.toString());
}
finally{
    if(fos!=null){
        try{
            fos.flush();
            fos.close();
        }
        catch(Exception e1){
            e1.printStackTrace();
        }
    } 
}
4

1 に答える 1

3

streamを閉じていますが、 writerは閉じていません。すべてのデータはライターでバッファリングされます。代わりにこれを使用してください:

Writer writer = null;
try{
    String xyz= "You should stop using xyz";
    writer = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream("aq.txt")));
    writer.write(xyz);
    writer.flush();
}    
catch(IOException e) {
    System.out.println("Couldn't write to the file: " + e.toString());
}
finally{
    if(writer != null){
        try {
            writer.close();
        }
        catch(IOException e1) {
            e1.printStackTrace();
        }
    }
}

(ライターを閉じると、基OutputStreamWriterになるものが閉じられ、それによっても閉じられFileOutputStreamます。)

flush呼び出しをブロックに移動したことに注意してください。ブロックに移動しtryたくない場合は、それが失敗した場合 (たとえば、ディスク容量が不足している場合)、ストリームを閉じることはありません。私は通常とにかく明示的にフラッシュせず、それを行うように任せていますが、一部の実装がフラッシュ中にサイレントに例外をキャッチする状況がいくつかあると警告されています:(flushfinallyclose

于 2012-03-17T09:01:48.253 に答える