Java 使用BufferedWriter写入字符串

Java 使用BufferedWriter写入字符串,java,bufferedwriter,stringwriter,Java,Bufferedwriter,Stringwriter,我试图使用BufferedWriter在写入文件和写入字符串之间切换,但我从未使用BufferedWriter写入文件以外的任何内容 以可编译代码为例: public static void main(String[] args) { try (BufferedWriter fileWriter = new BufferedWriter(new FileWriter(new File("file.txt"))); StringWriter sw = new Str

我试图使用
BufferedWriter
在写入
文件和写入
字符串之间切换,但我从未使用
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;
    }
}
但是程序的输出不会打印
StringWriter

诚然,使用
StringWriter
并将其交给
BufferedWriter
是一种直觉。我可以将
BufferedWriter
切换为
字符串的任何方式都可以解决这个问题。

您需要调用“flush()”将缓冲区的内容刷新到输出:


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

对于
FileWriter
,try with resources调用
BufferedWriter
上的
close()
,它会传播到
FileWriter
,并刷新您编写的所有内容


StringWriter
也会发生同样的情况,但是在您尝试使用其内容之后,它就会发生,此时的内容是空的。在调用
StringWriter
上的
toString()
之前,需要
flush()
相应的
BufferedWriter
,我尝试使用
Writer
,但它没有
newline()
方法。
name1,text1,20.4
name3,text3,11.56
name4,text4,56.0