5

14 個のリストがあり、各リストには数値データまたは文字列データがあります。各リストのサイズは 32561 です。次の形式でファイルを出力する必要があります。

list1_element1   list2_element1.......................list14_element1
list1_element2   list2_element2.......................list14_element2
.
.
.
.
.
list1_element32561   list2_element32561.......................list14_element32561

出力ファイルの各要素は、タブ スペースで区切られます。私はJavaでこのようにしました。

        out = new BufferedWriter(new FileWriter(fileName));
        for(int i=0; i<32561; i++) {
        out.write(firstList.get(i));
        out.write("\t");
        out.write(secondList.get(i));
        out.write("\t");
        out.write(thirdList.get(i));
        out.write("\t");
        out.write(fourthList.get(i));
        out.write("\t");
        out.write(fifthList.get(i));
        out.write("\t");
        out.write(sixthList.get(i));
        out.write("\t");
        out.write(seventhList.get(i));
        out.write("\t");
        out.write(eighthList.get(i));
        out.write("\t");
        out.write(ninthList.get(i));
        out.write("\t");
        out.write(tenthList.get(i));
        out.write("\t");
        out.write(eleventhList.get(i));
        out.write("\t");
        out.write(twelvethList.get(i));
        out.write("\t");
        out.write(thirteenthList.get(i));
        out.write("\t");
        out.write(fourteenthList.get(i));
            out.write("\t");
        out.write(fifteenthList.get(i));

        out.newLine();
    }
}

私のプログラムは 32441 行しか出力せず、最終行は 6 列しかありません。理由がわかりません。誰かが助けることができますか?

4

4 に答える 4

7

を閉じていないWriterので、バッファに残っているものはすべて失われます。

于 2013-10-14T10:57:32.537 に答える
3

バッファーは、ストリームがいっぱいになったとき、または writer.flush() または writer.close() 関数を呼び出したときにのみストリームに書き込まれます。あなたの場合、追加するだけです

out.close()

プログラムの最後に。そうしないと、バッファの残りの内容を書き込むようにライターに指示せずに、プログラムが終了するときに書き込まれないバッファ内のデータがあります。さらに多くのデータが来ると仮定して、それを保持します!

于 2013-10-14T10:59:36.127 に答える
0

完全なメソッドコードを提供していませんが、問題は「ライターを閉じておらず、出力バッファーを適切にフラッシュしていない」可能性があります。

out.flush();出力バッファをフラッシュする必要がある場合に使用します。そしてout.close;、ファイルへの書き込みを終了すると。

または

PrintWriter を使用できます。

PrintWriter writer = new PrintWriter(new FileWriter("file name"), true);

ライターで println() または format() または printf() が呼び出されたときに、出力バッファーが自動的にフラッシュされるようにします。または、手動で writer.flush() を使用して、必要に応じて出力バッファーをフラッシュすることもできます。

于 2013-10-14T11:13:24.847 に答える
0

BufferedWriter を使用できます。

    try (OutputStream outputStream = new FileOutputStream("applicationInfo.json")){
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8));
        var gson = new GsonBuilder()
                .serializeNulls()
                .create();
        gson.toJson(applicationInfo, JsonArray.class, bufferedWriter);
        bufferedWriter.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
于 2021-09-10T07:36:03.267 に答える