java - 为什么这段代码会导致 Java 覆盖文件中的数据?

标签 java bufferedreader bufferedwriter

我不确定为什么下面的代码会导致 Java 每次都覆盖文件中已有的数据,而我想要它做的实际上是将每条新数据写入新行。我已经包含了相关的代码片段(我知道您可能认为变量中有错误,但实际上没有,程序运行正常)。有人可以帮助我了解导致此问题的原因吗?是我使用文件编写器的方式吗?

String DirToWriteFile = System.getProperty("user.dir") + "/VirtualATM.txt"; //Get path to write text file to.

String Details = "Name: " + name + " CardNo: " + CardNo + " Current Balance: " + balance + " overdraft? " + OverDraft + " OverDraftLimit: " + OverDraftLimit + " pin: " + PinToWrite;
    try{
        //Create writer to write to files.
        File file = new File(DirToWriteFile);
        Writer bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF8"));         
        // FileReader reads text files in the default encoding.
        FileReader fileReader = new FileReader("VirtualATM.txt");
        // Always wrap FileReader in BufferedReader.
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String CurrentData = "";
        while((bufferedReader.readLine()) != null) {
                line = CurrentData;
                bw.write(CurrentData);
                ((BufferedWriter) bw).newLine();
        }
        bw.write(Details);
        System.out.println("Account created!");

        System.out.println(name + " Your card number is: " + CardNo);
        //  close the reader.
        bufferedReader.close();
        //Close the writer.
        bw.close();

最佳答案

使用另一个 FileOutputStream 构造函数,该构造函数采用 boolean 值 append 参数作为第二个参数。传入 true,因为这将告诉 Java 将文本附加到现有文件而不是覆盖它。

即更改此:

    File file = new File(DirToWriteFile);
    Writer bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF8"));         

对此:

    File file = new File(DirToWriteFile);
    FileOutputStream fos = new FileOutputStream(file, true); // **note second param?**
    Writer bw = new BufferedWriter(new OutputStreamWriter(fos, "UTF8"));         

关于java - 为什么这段代码会导致 Java 覆盖文件中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26088586/

相关文章:

java - 我在使用抛硬币程序时遇到一些问题

java - 8 皇后算法 : Not getting full result set

java - 如何将文件读入二维数组

go - Golang Bufio WriteByte未写入

java - 是否有与 unputc 等效的 Java?

Java,如何写入或添加而不是覆盖文本文件?

java - 使用WindowBuilder + Scala,有什么好的想法吗?

Java如何启动IntelliJ IDEA制作的GUI

java - BufferedReader 然后写入 txt 文件?

java - BufferedWriter、FileWriter、Output Stream……做这些事情最现代的方法是什么?