BufferedWriter 防止覆盖

BufferedWriter prevent overwriting

我有一个 BufferedWriter,它已经写入文件,但不是我想要的方式。 我在循环中对其进行初始化,使其仅附加循环的最后一个结果以将其添加到文件中。 其实这对我来说没问题,但文件中以前的结果被删除了。 我希望在不删除以前的结果的情况下添加结果。

我尝试创建静态 Buffered Reader 以便不总是在循环中创建 Buffered Reader 的新实例。 但这是不可能的,因为你需要一个 "try" 块。

public void actionPerformed(ActionEvent e) {
            String s;
            try {
                if (parseInt(jTextFieldNumber.getText()) == random) {
                    info.setText("Attempt # " + counter + ": " + 
parseInt(jTextFieldNumber.getText()) + " ==> correct!");
                    ok.setEnabled(false);
                } else if (parseInt(jTextFieldNumber.getText()) < random) 
{
                    info.setText("Attempt # " + counter + ": " + 
parseInt(jTextFieldNumber.getText()) + " ==> too small!");
                } else {
                    info.setText("Attempt # " + counter + ": " + 
parseInt(jTextFieldNumber.getText()) + " ==> too big!");
                }
            } catch (NumberFormatException nfe) {
                nfe.printStackTrace();
                System.exit(0);
            }
                s = jTextFieldName.getText() + " " + counter;
                BufferedWriter bw;
                try {
                    bw = new BufferedWriter(new 
FileWriter("C:\wrk\SapCommerceCloud\src\SwingUni\events1\name"));
                    bw.append(s);
                    if(info.getText().equals("Attempt # " + counter + ": 
" + parseInt(jTextFieldNumber.getText()) + " ==> correct!")){
                        bw.close();
                    }
                } catch (IOException io) {
                    io.printStackTrace();
                }
            counter++;
        }
    };

使用

 bw = new BufferedWriter(new 
FileWriter("C:\wrk\SapCommerceCloud\src\SwingUni\events1\name", true));

调用这个构造函数 测试

FileWriter(String fileName, boolean append)
Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written.

我想你问的是如何追加到一个文件,即使你正在创建新的 BufferedWriters。

使用文件写入器,第二个参数为真,像这样:

try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("myfile.txt", true)));
    out.println("the text");
    out.close();
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}

参考: How to append text to an existing file in Java

FileWriter 有一个构造函数 public FileWriter(String fileName, boolean append) throws IOException。 如果您使用 true 作为追加,文件将不会被覆盖 see the javadoc of FileWriter

更好的解决方案可能是使用 one FileWriter。