ファイルからテキストを1行ずつ読み取り、新しいテキストを出力ファイルに書き込むJavaプログラムがあります。BufferedWriter
しかし、プログラムの終了後、私が書き込んだすべてのテキストが出力ファイルに表示されるわけではありません。何故ですか?
詳細:プログラムはCSVテキストドキュメントを取得し、それをSQLコマンドに変換して、データをテーブルに挿入します。テキストファイルには10000行以上あり、次のようになります。
2007,10,9,1,1,1006134,19423882
プログラムは、SQLファイルに出力された新しいSQLステートメントの作成の途中でランダムにファイル内で停止することを除いて、正常に動作しているようです。次のようになります。
insert into nyccrash values (2007, 1, 2, 1, 4, 1033092, 259916);
insert into nyccrash values (2007, 1, 1, 1, 1, 1020246, 197687);
insert into nyccrash values (2007, 10, 9, 1
これは、約10000行後、ファイルの終わりの数百行前に発生します。ブレークが発生する場所は、a1
とaの間,
です。1
ただし、を変更すると42
、新しいファイルに書き込まれる最後のものは、であるため、文字は重要ではないようです4
。これは、その整数から2を切り取っています。ですから、読者や作家は、ある程度の量の書き込み/読み取りを行った後、ただ死にかけているに違いないようです。
私のJavaコードは次のとおりです。
import java.io.*;
public class InsertCrashData
{
public static void main (String args[])
{
try
{
//Open the input file.
FileReader istream = new FileReader("nyccrash.txt");
BufferedReader in = new BufferedReader(istream);
//Open the output file.
FileWriter ostream = new FileWriter("nyccrash.sql");
BufferedWriter out = new BufferedWriter(ostream);
String line, sqlstr;
sqlstr = "CREATE TABLE nyccrash (crash_year integer, accident_type integer, collision_type integer, weather_condition integer, light_condition integer, x_coordinate integer, y_coordinate integer);\n\n";
out.write(sqlstr);
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);
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}