2015-05-04 258 views
1

嗨加載遊戲我工作的一個遊戲,可以節省幾個州一次我保存按鈕cliked,如:姓名,totalScore ...讀取數據從文本文件

這是我救了它:

public static void save() 
{ 
    fileName = new File("Saved Game"); 

    try 
    { 
     fw = new FileWriter(fileName,true); 
    } 
    catch (IOException e) 
    {  
     e.printStackTrace(); 
     JOptionPane.showConfirmDialog(frame, e.toString() + "\nFail to save game.", 
       "Saved", JOptionPane.DEFAULT_OPTION); 
    } 

    f = new Formatter(fw); 
    f.format("\n%s\t",level); 
    f.format("\t%s\t", nameLabel.getText()); 
    f.format("\t%s\t\t", updatedLabel.getText()); 

    f.close(); 


    JOptionPane.showConfirmDialog(frame, "Saving was successful.", "Game Saved", 
      JOptionPane.DEFAULT_OPTION); 
} 

我想加載一個遊戲,而不是每次都啓動一個新遊戲。我可以從文本文件中讀取數據並將其打印到屏幕上,但不知道如何將這些數據加載到標籤中(例如名稱)以開始遊戲。有任何想法嗎?

我加載文本文件至今代碼:

public static void readFromFile (String fileName) throws IOException 
{ 
    FileReader fr = new FileReader(fileName); 
    BufferedReader br = new BufferedReader(fr); 

    System.out.println(br.readLine()); 

    br.close(); 
} 

我稱之爲在「加載」按鈕,點擊這個方法。任何想法將不勝感激。

+0

閱讀[this](https://docs.oracle.com/javase/tutorial/essential/io/file.html)。 – user1803551

回答

1

對於將單個保存文件讀入工作存儲器中,不需要ArrayList。既然你寫的方法寫的文件,你含蓄知道哪些數據是哪裏,所以如果你寫功能看起來像(這是那種僞十歲上下,但它橫跨得到點)

outFile.writeLine(foo.name) 
outFile.writeLine(foo.health) 
outFile.writeLine(foo.level) 

foo作爲你的角色類的實例的名字。你讀的功能將類似於

​​ 當然

,你需要建立bar作爲類的空實例第一,以及做所有的相關FILEIO設置和打掃房間,不要忘記從返回bar你的閱讀功能。

0

使用readLine()遍歷每行並將它們保存到ArrayList。由於您是創建文本文件的人,因此當您從數組中檢索值時,您知道每行中應該包含哪些內容。

BufferedReader in = new BufferedReader(new FileReader("path/of/text")); 
     String str;  

List<String> list = new ArrayList<String>(); 
     while((str = in.readLine()) != null){ 
      list.add(str); 
     } 
2

執行此操作的常用方法是使用java.util.Properties從文本文件中讀取鍵值對。在這個完整的example中,屬性文件用於初始化規則的詞彙表。規則的enum顯示在JComboBox中。您也可以使用屬性初始化java.util.prefs.Preferences實例中的默認值,如遊戲引用here所示。

+0

呵呵,我不知道,當我第一次從輸入文件讀取時,我用C++工作,所以我沒有訪問Java的擴展庫。很高興知道,但是對於任何人來說這都是一個警告,除非你打算永遠只使用Java,在你使用庫之前,確保你知道如何在沒有庫的情況下解決問題,因爲在Java中基本的東西是通常在其他語言中完全沒有。 'toString()'是我最喜歡的例子。 –

+1

@MitchellCarroll:我嘗試利用這些庫,並且我發現Java設計可以在其他場合告知我自己的設計。在上下文中解決OP的問題的榮譽。 – trashgod

+0

同樣,當我做C++時,我總是確保爲我創建的每個對象添加一個'toString()'函數。利用Java的庫可以極大地提高你的工作效率,但是依賴它們(Java是我真正致力於學習的第一種語言)會成爲其他語言的障礙,特別是c/C++ –