一尘不染

JavaBufferedWriter不会将所有内容写入其输出文件

java

我有一个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);
        }
    }
}

阅读 762

收藏
2020-02-29

共1个答案

一尘不染

你需要关闭你的设备OutputStream,这将清除其余数据:

out.close();

默认缓冲区大小BufferedWriter为8192个字符,大到足以轻松容纳数百个不成文的行的数据。

2020-02-29