2013-04-01 84 views
1

我創建了一個Java遊戲,當遊戲結束時,會執行一個方法告訴用戶輸入他/她的名字,然後他們的分數將保存在playscores.txt文檔中。這工作正常。但是,我想要的不僅僅是這個文檔中的一個人的分數。我想要它,所以每個玩遊戲名稱和分數的人都會被保存在這個文檔中。真的很感謝一些幫助。FileWriter,How to write on the same document

這是我gameComplete方法代碼:

public void gameComplete() throws IOException { 
    String name = (String) JOptionPane.showInputDialog(
      frame, 
      "Enter your name: ", 
      "Save Score", 
      JOptionPane.PLAIN_MESSAGE); 
    Score score = new Score(player.getScore(), name); 
    FileWriter fstream = new FileWriter("playerscores.txt"); 
    BufferedWriter out = new BufferedWriter(fstream); 
    out.write("Name : " + score.getName() + System.getProperty("line.separator") ); 
    out.write("Score : " + score.getScore()); 
    out.close(); 
} 

我曾嘗試不同的東西,比如ObjectOutputStream的可惜無法弄清楚如何做到這一點,並想知道如果它甚至有可能。此外,我想知道我應該使用什麼類來完成這件事。

+0

也[這裏](http://stackoverflow.com/questions/3005124/writing-to-an-already-existing-file-using-filewriter-java),還[此問題](http:// stackoverflow.com/questions/1616746/java-filewriter-overwrite?rq=1)。 –

+0

@HovercraftFullOfEels我發現我自己的帖子的創建者已經要求將其刪除,因爲有重複的帖子。 –

回答

1

如果你感到快樂,只是追加新的評分,以文件的末尾,取代:

FileWriter fstream = new FileWriter("playerscores.txt"); 

有:

FileWriter fstream = new FileWriter("playerscores.txt", true); 

如果你能有一個以上的用戶在玩同時,您還需要使用文件鎖定功能,以避免訪問文件時的競爭條件。

+0

謝謝Martin,從來不知道那是那麼簡單!不幸的是,我不能接受你的答案再過8分鐘! –

+0

@JamesDanny:如果你接受他或不接受他,因爲這個問題很可能會被重複。它只被問過幾百次。 –

1

爲了對多人進行操作,您應該以追加模式打開文件。

FileWriter fstream = new FileWriter("playerscores.txt",true); 

語法:public FileWriter(File file, boolean append)

參數:

  • 文件 - 一個文件對象寫入

  • 追加 - 如果爲true,則將字節寫入到文件末尾 rathe比開始。

默認情況下,追加參數爲所以,早些時候,你用當前的球員覆蓋了前一名球員的得分。

1

首先,如果您希望將文件添加到每個時間而不是擦除和寫入,請確保添加了第二個參數true以使其附加文本。

您可以使用CSV文件將答案存儲在列中,然後通過使用逗號讀出解析數據。

FileWriter fileW = new FileWriter("playerscores.txt", true);

希望有所幫助。