BufferedWriter没有写入我的文本文件

时间:2014-06-18 16:46:04

标签: java

File outFile = new File("D:\\output.txt");
BufferedWriter wb = new BufferedWriter(new FileWriter(outFile));


while (resultSet.next()) {
    int attr_id = resultSet.getInt("int_id");
    String stringValue = resultSet.getString("StringValue");
    String name = resultSet.getString("Name");
    int index = stringValue.indexOf(".");
    int valueLength = stringValue.length();
    if(isNumeric(stringValue)) {
        //if(index != -2 ) {
        if(index != (valueLength - 2)) {
            String string1 = Double.valueOf(stringValue).toString();
            System.out.println("converted values : " +string1);
            System.out.println("stringValue : " +stringValue);
            System.out.println("intValue : " +int_id);
            wb.write( stringValue + "," + int_id + "," + string1  );
            wb.newLine();
        }
    }
}

上面是我的代码部分,从结果集我将数据写入文件。但是代码不是在output.txt文件中打印值,但我可以在控制台中看到结果 如果我删除注释行并注释if(index != (valueLength - 2)) {这一行,java代码正在创建带有值的output.txt。

怎么了?

2 个答案:

答案 0 :(得分:1)

完成后,可能需要在BufferedWriter上调用flush和/或close。

答案 1 :(得分:0)

您的代码未写入文件的原因是您从未将数据从Writer推送到实际文件。

将BufferedWriters视为您要发送给同事的电子邮件。当你使用:

        wb.write( stringValue + "," + int_id + "," + string1  );

就像您正在向同事输入电子邮件,并向他们定义消息。但是,由于您没有按"发送电子邮件",您的同事将永远不会看到该消息。这里可以应用相同的概念。

您正在使用大量数据填充编写器,但您永远不会将数据发送到您尝试写入的文件。有两种方法可以做到这一点,第一种方式是" flush"作者(见文档HERE)。你可以通过调用

来做到这一点
    wb.flush();

这相当于按下"发送电子邮件",并将数据写入您正在编辑的文件。第二种方法是"关闭"作者(见文件HERE)。这样做的原因是因为BufferedWriter的close方法在关闭流之前首先刷新流。这可以通过调用

来完成
    wb.close();

尽管如此,在完全编辑文件之前这样做是不明智的,因为无法再访问它。

以下是您编写的代码,用于在您编写的每条记录之后刷新流,然后在处理完所有记录后关闭流。注意wb.flush()和wb.close()的位置。

File outFile = new File("D:\\output.txt");
    BufferedWriter wb = new BufferedWriter(new FileWriter(outFile));


    while (resultSet.next()) {
        int attr_id = resultSet.getInt("int_id");
        String stringValue = resultSet.getString("StringValue");
        String name = resultSet.getString("Name");
        int index = stringValue.indexOf(".");
        int valueLength = stringValue.length();
        if(isNumeric(stringValue)) {
            //if(index != -2 ) {
            if(index != (valueLength - 2)) {
                String string1 = Double.valueOf(stringValue).toString();
                System.out.println("converted values : " +string1);
                System.out.println("stringValue : " +stringValue);
                System.out.println("intValue : " +int_id);
                wb.write( stringValue + "," + int_id + "," + string1  );
                wb.newLine();
                wb.flush();
            }
        }
    }
    wb.close();