2014-09-28 59 views
2

我不确定为什么下面的代码会导致Java每次都会覆盖已存在于我的文件中的数据,而当我想要的是实际上将每条新数据写入新行时。我已经包含了相关的代码片断(我知道你可能认为变量中有错误,但是没有,程序工作正常)。有人可以帮助我理解是什么导致了这种情况,是我使用文件编写器的方式吗?这段代码为什么会导致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(); 

回答

5

使用其他FileOutputStream中构造函数,所述一个接受一个布尔附加参数作为第二个参数。传入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"));