問題:
Java プログラムが CSV データを SQL コマンドに変換しようとしました出力ファイルに問題が発生しています。 BufferedWriter に書き込まれたすべてのデータが出力ファイルに表示されるわけではありません。
詳細:
プログラムは 10,000 行を超える CSV ファイルを読み取り、SQL ステートメントを生成して、データをテーブルに取り込みます。ただし、出力ファイルは途中で切り詰められ、最後の不完全なステートメントの値の一部が欠落しています。
コード:
// ... while((line = in.readLine())!= null) { String[] esa = line.split(","); sqlstr = "insert into nyccrash values ("+esa[0]+", "+esa[1]+", "+esa[2]+", "+esa[3]+", "+esa[4]+", "+esa[5]+", "+esa[6]+");\n"; out.write(sqlstr); } // ...
解決策:
この問題は、書き込みプロセス中に出力バッファがフラッシュされないために発生します。 BufferedWriter のデフォルトのバッファ サイズは 8192 文字で、複数行を保持するには十分です。バッファーがいっぱいになると、バッファーが手動でフラッシュされるまでデータはファイルに書き込まれません。
すべてのデータが出力ファイルに確実に書き込まれるようにするには、OutputStream を明示的に閉じる必要があります。これにより、残っているデータはフラッシュされます。バッファ内のデータ:
out.close();
出力ストリームを閉じると、部分的なステートメントを含むすべてのデータがプログラムの前にファイルにフラッシュされることが保証されます。終了します。
以上がBufferedWriter がすべてのデータを出力ファイルにフラッシュしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。