У меня есть программа 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 строк, но несколько сотен строк до конца файла. Там, где происходит разрыв, между a 1
и a ,
. Однако символы не кажутся важными, потому что если я изменил значение 1
на a 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);
}
}
}