【问题标题】:Using BufferedWriter to write to a string [duplicate]使用 BufferedWriter 写入字符串 [重复]
【发布时间】:2015-02-19 05:24:54
【问题描述】:

我正在尝试使用BufferedWriter 在写入File 和写入String 之间切换,但我从未使用BufferedWriter 写入文件以外的任何内容。

获取这个可编译的代码:

public static void main(String[] args) {
    try (BufferedWriter fileWriter = new BufferedWriter(new FileWriter(new File("file.txt")));
            StringWriter sw = new StringWriter();
            BufferedWriter stringWriter = new BufferedWriter(sw)) {

        LinkedList<Record> records = new LinkedList<>();
        records.add(new Record("name1", "text1", 20.4));
        records.add(new Record("name2", "text2", -78));
        records.add(new Record("name3", "text3", 11.56));
        records.add(new Record("name4", "text4", 56));
        records.add(new Record("name3", "text3", -44));

        for(Record record : records) {
            BufferedWriter writer;
            if(record.amount < 0) {
                writer = stringWriter; // write to string if amount is less than zero
            } else {
                writer = fileWriter; // write to file if not
            }

            writer.append(record.name);
            writer.append(",");
            writer.append(record.text);
            writer.append(",");
            writer.append(String.valueOf(record.amount));
            writer.newLine();

        }

        String less_than_zero_amounts = sw.toString();
        System.out.println("Less than zero:" + less_than_zero_amounts);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

static class Record {
    String name;
    String text;
    double amount;

    public Record(String name, String text, double amount) {
        this.name = name;
        this.text = text;
        this.amount = amount;
    }

    public String getText() {
        return text;
    }

    public String getName() {
        return name;
    }

    public double getAmount() {
        return amount;
    }
}

文件的输出是(正确的)

name1,text1,20.4
name3,text3,11.56
name4,text4,56.0

但是程序的输出不打印StringWriter

诚然,使用StringWriter 并将其提供给BufferedWriter 是一种预感。我可以将BufferedWriter 切换为输出到String 的任何方式都可以解决问题。

【问题讨论】:

    标签: java bufferedwriter stringwriter


    【解决方案1】:

    您需要调用“flush()”将缓冲区的内容刷新到输出: http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#flush()

    虽然我应该补充一点,而不是在 BufferedWriter 对象之间进行选择,您可能只想在 Writer 对象之间进行选择... StringWriter 有自己的缓冲区,因此无需添加额外的层BufferedWriter 在它上面。

    【讨论】:

    • 我尝试使用Writer,但它没有newline() 方法。
    【解决方案2】:

    FileWriter 的情况下,try-with-resourcesBufferedWriter 上调用close(),该BufferedWriter 传播到FileWriter 并刷新您编写的所有内容。

    StringWriter 也是如此,但它发生在您尝试使用其内容之后,此时它是空的。在StringWriter 上调用toString() 之前,您需要flush() 对应的BufferedWriter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多