2017-03-02 124 views
0

我試圖用Java編寫預約書程序,但是BufferedWriter似乎沒有寫入文件。如何讓BufferedWriter寫入文本文件?

此代碼是一個try { } catch (FileNotFoundException) { } catch (IOException) { }

FileWriter writer = new FileWriter("Appointments" + name + ".txt", true); 
BufferedWriter bufferedWriter = new BufferedWriter(writer); 

if (open == 'o') { 
    FileReader reader = new FileReader("Appointments" + name + ".txt"); 
    BufferedReader bufferedReader = new BufferedReader(reader); 
    while ((line = bufferedReader.readLine()) != null) { 
     if (line.indexOf("one-time") == line.length() - 8) { 
      OneTime o = fromStringOneTime(line); 
      oneTimes.add(o); 
     } 
     if (line.indexOf("daily") == line.length() - 5) { 
      Daily d = fromStringDaily(line); 
      dailys.add(d); 
     } 
     if (line.indexOf("monthly") == line.length() - 7) { 
      Monthly m = fromStringMonthly(line); 
      monthlys.add(m); 
     } 
    } 
} 

的while循環剛初始化所有值的當前在文件分成3周不同的ArrayLists的所有內部。

然後我的代碼來創建新的對象塊,一旦你選擇要添加預約(變量descdate先前已經被定義):

System.out.print("Enter if this is a (o)ne-time, (d)aily, or (m)onthly appointment: "); 
freq = scanner.next().charAt(0); 
if (freq == 'o') { 
    OneTime o = new OneTime(desc, date.getDate()); 
    oneTimes.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} else if (freq == 'd') { 
    Daily o = new Daily(desc, date.getDate()); 
    dailys.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} else if (freq == 'm') { 
    Monthly o = new Monthly(desc, date.getDate()); 
    monthlys.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} 

在的結束嘗試塊,我有行reader.close()writer.close()。那麼爲什麼當我檢查應該保存的文件時,它仍然顯示爲空白?這是我第一次處理文件保存問題,所以我不確定它爲什麼沒有按照應有的方式工作。 。

編輯:如果選擇打開,而不是創建一個新的

+0

您無法同時讀取和寫入文件大多數操作系統。 – EJP

+0

那麼,如果我在完成使用後立即關閉閱讀器,它會起作用嗎?因爲我只需要將它用於初始化,在我放入我的帖子的第一個代碼塊中。 – RoboticPlayer

+0

您可以嘗試寫入具有不同文件名的文件,並在程序結束時將其重命名爲 – GrabNewTech

回答

0

是,大多數操作系統不會允許讀取和寫入同一個文件中的現有文件的選項文件將現在只讀。因此,您可以通過寫入臨時文件名的文件來解決此問題,並在程序結束時將其重命名爲原始文件。

try { 
    FileWriter writer = new FileWriter("Appointments" + name + "1.txt", true); 
    FileReader reader = new FileReader("Appointments" + name + ".txt"); 
    BufferedReader bufferedReader= new BufferedReader(reader); 
    BufferedWriter bufferedWriter = new BufferedWriter(writer); 
    ....... 
} catch() { 
    ...... 
} finally { 
    bufferedReader.close(); 
    bufferedWriter.flush(); 
    bufferedWriter.close(); 
} 

// Rename the file and delete temp file 
File srcFile = new File("Appointments" + name + "1.txt"); 
File targerFile = new File("Appointments" + name + ".txt"); 
srcFile.renameTo(targetFile); 
srcFile.delete(); 
+0

試過了,該文件仍然是空的。附加'1'的第二個文件被創建,但我從未看到任何存儲在其中的內容。 – RoboticPlayer

+0

你有沒有爲bufferedWriter調用flush()或close()? – GrabNewTech

+0

是的,我打電話給他們。 – RoboticPlayer

相關問題