BufferedWriter不会将所有内容写入输出文件 [英] BufferedWriter not writing everything to its output file

查看:723
本文介绍了BufferedWriter不会将所有内容写入输出文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Java程序,从文件中逐行读取一些文本,并将新文本写入输出文件。但是,在程序结束后,输出文件中并没有写入我的 BufferedWriter 的所有文本。为什么会这样?



详细信息:该程序将一个CSV文本文档转换为SQL命令以将数据插入到表中。该文本文件有超过10000行,看起来类似于以下内容:

$ pre code> 2007,10,9,1,1,1006134, 19423882

该程序似乎工作正常,除了它只是停止在文件随机创建一个新的一半已将SQL语句打印到SQL文件中。它看起来像这样:

  insert into nyccrash values(2007,1,2,1,4,1033092,259916); 
插入nyccrash值(2007,1,1,1,1,1020246,197687);
插入到nyccrash值(2007,10,9,1

大约10000但在文件结尾处有几百行,发生中断的地方在 1 之间,之间。然而,这些字符似乎并不重要,因为如果我将 1 更改为 42 ,最后写入新文件是 4 ,这是从该整数中删除2,所以看起来读者或写作者在写入/读取一定量之后必定会死亡。我的Java代码如下:

  import java.io. * ; 

public class InsertCrashData
{
public static void main(String args [])
{
try
{
//打开输入文件
FileReader istream = new FileReader(nyccrash.txt);
BufferedReader in = new BufferedReader(istream);
//打开输出t文件。
FileWriter ostream = new FileWriter(nyccrash.sql);
BufferedWriter out = new BufferedWriter(ostream);
字符串行,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); \\\
\\\
;
out.write(sqlstr); ((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] +); \\\
;
out.write(sqlstr);


catch(Exception e)
{
System.out.println(e);




$ div class =h2_lin>解决方案

您需要关闭 OutputStream ,这将清空您的数据的其余部分:

  out.close(); 

BufferedWriter 的默认缓冲区大小为< a href =http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/io/BufferedWriter.java#BufferedWriter.0defaultCharBufferSize> 8192个字符,足够容易保存数百行未写入的数据。


I have a Java program that reads some text from a file, line by line, and writes new text to an output file. But not all the text I write to my BufferedWriter appears in the output file after the program has finished. Why is that?

The details: the program takes a CSV text document and converts it into SQL commands to insert the data into a table. The text file has more than 10000 lines which look similar to following:

2007,10,9,1,1,1006134,19423882

The program seems to work fine except it just stops in the file randomly half way through creating a new SQL statement having printed it into the SQL file. It looks something like:

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

This happens after about 10000 lines but several hundred lines before the end of the file. Where the break happens is between a 1 and a ,. However, the characters doesn't seem important because if I change the 1 to a 42 the last thing written to the new file is 4, which is cutting off the 2 from that integer. So it seems like the reader or writer must just be dying after writing/reading a certain amount.

My Java code is as follows:

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);
        }
    }
}

解决方案

You need to close your OutputStream which will flush the remainder of your data:

out.close();

The default buffer size for BufferedWriter is 8192 characters, large enough to easily hold hundreds of lines of unwritten data.

这篇关于BufferedWriter不会将所有内容写入输出文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆