2015-05-04 208 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++ –