1

データの行を含む7つの異なるテキストファイルを作成する関数があります。これらの7つのファイルは、次の関数を使用して、別の関数で1つのファイルに結合されます。

public void createSingle683File(int groupNumber, FileWriter wr){
        try{
            if(new File(printDir+"683_"+groupNumber+".txt").exists()){
                File f683 = new File(printDir+"683_"+groupNumber+".txt");
                BufferedReader input = new BufferedReader(new FileReader(f683));
                String line = null;
                while ((line = input.readLine()) != null){
                    //write contents of existing file to new file
                    wr.write(line+"\n");
                }
                //close bufferedInput
                input.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

呼び出しコード:

    File fileHandle683 = new File(printDir+"683.txt");
                FileWriter wr683 = new FileWriter(fileHandle683);
                for (int groupNumber = 1; groupNumber < 8; groupNumber++){
                    createSingle683File(groupNumber,wr683);
                }
.
.
.
.
.//stuff
wr683.close();

Alawaysの最後の683.txtには、7番目のファイル(683_7.txt)から約50行が欠落しており、その理由がわかりません。欠落しているのは、常に、そして唯一、最終ファイルの最後の数行です。bufferInputをすぐに閉じるのか、それとも何を閉じるのかわかりません。

任意のアイデアをいただければ幸いです。どんなアイデアでもすぐにテストできます。

ありがとう!

4

3 に答える 3

4

その FileWriter インスタンスを呼び出しflush()ていますか?close()

于 2011-05-05T17:11:09.783 に答える
3

どこで閉じているのかわかりませんwr683。プロセスがシャットダウンしたときに、データがバッファに残っていると思われます。少なくとも電話してflush()ください。

于 2011-05-05T17:12:35.047 に答える
0

現在、最終ファイルのファイルライターを閉じていません。そのため、現在欠落しているコンテンツがまだストリーム I/O のキャッシュにある可能性があります。そのため、最終ファイルの FileWriter インスタンスを閉じて、ファイルの内容を確認します。

したがって、 for ループの後に入力するだけです

wr683.close();

それが役に立てば幸い。

于 2011-05-05T17:16:52.377 に答える