当前位置: 首页 > 面试题库 >

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

尤茂材
2023-03-14
问题内容

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

问题答案:

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

out.close();

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



 类似资料:
  • 我在Java中编写了一个更新由制表符分隔的文本文件的方法。我正在使用opencsv库。首先我在现有文件中读取,然后我更改一些列的值,然后我覆盖文件。我正在运行Windows 7。现在的问题是,并非所有内容都写入文件。即使我不更改任何值,只是覆盖文件,也不是所有记录都写入。 我的代码如下。它有什么问题?

  • 问题内容: 我使用以下命令在后台运行python脚本: 但nohup似乎没有向日志文件写入任何内容。命令日志是 已创建但始终为空。在python脚本中,我使用 而不是打印到标准输出。我在做什么 有什么不对劲吗? 问题答案: 看起来你需要定期刷新stdout(例如。 ). 在我的测试中,Python甚至不会自动做到这一点 直到程序退出。

  • 我使用以下命令在后台运行python脚本: 但nohup似乎没有向日志文件写入任何内容。cmd.log已创建,但始终为空。在python脚本中,我使用而不是来打印到标准输出。我做错什么了吗?

  • 问题内容: 在我的机器上,我有一些软件可以在终端中接收命令并返回值列表。 要运行它,我必须输入以下内容: 我正在尝试将其作为python程序的一部分运行。当我运行以下命令时: 然后我得到想要返回到终端的值(其中epoch_name是文件名的变量名)。但是,当我尝试将结果写入文件时: 产生了文件123.txt,但它为空。 我知道我放错了“和/或’字符,但是我不知道它们应该去哪里。 任何帮助将不胜感激

  • 我正试图按照他们网站上的教程使用Tika从pdf文件中提取文本,但我只得到了25k行文本,看起来像这样。 %PDF-1.5%目标 我在尝试时也会得到同样的东西。docx格式,但它可以很好地与。txt。有人知道我做错了什么吗?