2016-12-15 48 views
-1

林建設租車計劃,我想什麼來,現在是:如何在Java中使用表和.txt?

  • 註冊用戶
  • 使用txt文件來存儲數據寄存器汽車

隨着我寫的代碼,我只能註冊一輛汽車和用戶。每次我運行客戶端或汽車的註冊方法時,最後的寄存器都會被擦除。

你能幫我嗎?此外,稍後我將實施一種租賃汽車的方式,但我也不知道該怎麼做,所以如果您有任何想法,請告訴我!

另外我打算沒有SQL或這樣的事情。

這是我使用註冊用戶代碼(我使用NetBeans與JForm):

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    String nomeClient = txtNomeClient.getText(); 
    String idClient = txtIdClient.getText(); 

    File file = new File("clients.txt"); 

    try { 
     PrintWriter output = new PrintWriter(file); 
     output.println(nomeClient); 
     output.println(idClient); 
     output.close(); 
     JOptionPane.showMessageDialog(null, "Client registed!"); 
    } catch (FileNotFoundException e) { 
    } 

} 

回答

2

的問題是,你覆蓋現有文件clients.txt,而不是追加的致電new PrintWriter(file)。您可以使用下面的代碼:

FileWriter fileWriter = new FileWriter(file, true); 
PrintWriter output = new PrintWriter(fileWriter)); 

這樣,你追加文件的末尾,看到構造FileWriter(File file, boolean append)。該文檔完美地描述了它:

構造一個給定File對象的FileWriter對象。如果第二個參數爲true,則字節將寫入文件的末尾而不是開頭。

FileWriter僅用於在追加模式下打開文件,因爲PrintWriter沒有合適的構造函數來直接執行該操作。您也可以使用它編寫字符,但PrintWriter允許格式化輸出。來自FileWriterdocumentation

用於寫入字符文件的便利類。這個類的構造函數假定默認的字符編碼和默認的字節緩衝區大小是可以接受的。

PrintWriter使用其構造函數傳遞的FileWriter追加到目標文件,看到here一個很好的解釋。如上所述,您也可以使用FileOutputStream。有多種方法可以做到這一點。

以下是使用FileOutputStreamBufferedWriter的示例,該示例支持緩衝並可減少不必要的寫入來懲罰性能。

FileOutputStream fileOutputStream = new FileOutputStream("clients.txt", true); 
BufferedWriter bufferedWriter = new BufferedWriter(fileOutputStream); 
PrintWriter printWriter = new PrintWriter(bufferedWriter); 
+0

工作正常!你能解釋那裏發生了什麼? –

+1

我已經爲'BufferedWriter'添加了一個示例, – thatguy