2

そこで、2 つの LinkedList の内容を次の形式のテキスト ファイルに書き込むプログラムを作成しました。

「ヘッダー行 1」

「ヘッダー行 2」

「ヘッダー行 3」

x1 y1

x2 y2

x3 y3

...

x1023 y1023

主な書き込みコードは次のとおりです。

    LinkedList<Double> xVal;
    LinkedList<Double> yVal;
    LinkedList<String> header;
    Analize test;
    Scanner scan = new Scanner(System.in);
    FileWriter fstream;
    BufferedWriter out;

    int i=1;
    test = new Analize(i);
    test.addData();
    test.calculate();


    //Writing ModY
    fstream = new FileWriter("BLOCK " +i+"_ModY.txt");
    out = new BufferedWriter(fstream);
    header = test.getHeader();
    xVal=test.getXList();
    yVal=test.getYListMod();


    //Write Header
    out.write(header.get(0)+"_modY");out.newLine();
    out.write(header.get(1));out.newLine();
    out.write(header.get(2));out.newLine();

    for(int j=0;j<xVal.size();j++)
    {
        double x=xVal.get(j);
        double y=yVal.get(j);
        out.write(x+"\t"+y+" "+j);out.newLine();
        //test code
        System.out.println(xVal.get(j)+"    "+yVal.get(j)+" "+j);
        //System.out.println(j);
    }

本当に面倒なことは、テスト コード行 System.out.println(xVal.get(j)+" "+yVal.get(j)+" "+j); です。System.in の正しい値で実際に 1023 回実行されましたが、ファイルには 558 番目までの値しかありません。

ここで何が起こっているのかよくわかりません...

4

2 に答える 2

14

out.close();あなたがどこにも電話しているのを見ません。これにより、基になるストリームがフラッシュされて閉じられます。forループの直後に配置します。

常にストリームを閉じていることを確認してください。そうしないと、一部のデータがメモリ内でぶらぶらし、JVM が来てファイルにフラッシュするのを待っている可能性があります。

于 2012-07-25T23:22:34.680 に答える
2

Coryが言ったことに加えて、必ず、finallyブロックで基になるストリームを閉じて、例外に関係なく閉じられるようにします。

于 2012-07-25T23:24:30.400 に答える