使用java将数据写入文件

时间:2011-03-02 02:46:23

标签: java data-structures binary-tree random-access

我在java中编写一个服务器,允许客户玩类似于20个问题的游戏。游戏本身基本上是一个二叉树,其节点是关于对象的问题,而叶子是对象身份的猜测。当游戏猜错时,它需要能够从玩家那里得到正确的答案并将其添加到树中。然后将此数据保存到随机访问文件中。

问题是:如何在文件中表示树,以便以后可以将数据作为树重新访问。

如果您知道我在哪里可以找到有关在写入/读取文件时保持树木等数据结构的信息,请将其链接起来。非常感谢。


感谢大家快速解答。这是一个学校项目,所以它有一些奇怪的要求,如使用随机访问文件和telnet。

4 个答案:

答案 0 :(得分:2)

  

然后将此数据保存到随机访问文件中。

这是解决问题的难题(我的意思是“随机访问”位。)

您真正想要解决的问题是如何坚持“复杂”的数据结构。事实上,有很多方法可以做到这一点。以下是其中一些......

  • 使用Java持久性。这很容易实现;确保您的数据结构是可序列化的,然后只需要几行代码来序列化,再多几行来反序列化。缺点是:

    • 面对代码更改,序列化对象可能很脆弱。
    • 序列化不是增量的。你每次都要写/读整个图。
    • 如果您有多个单独的序列化图表,则需要一些方案来命名和管理它们。
  • 使用XML。这比Java持久性更多地实现,但它具有不易碎的优点。如果出现问题,您可以使用XSLT或文本编辑器修复它。 (有一些XML“绑定”库可以消除大量的胶水编码。)

  • 使用SQL数据库。这解决了Java持久性的所有缺点,但涉及更多编码......并使用不同的计算模型来访问持久数据(查询与图形导航)。

  • 使用数据库和对象关系映射技术;例如JPA或JDO实现。 (Hibernate是一个受欢迎的选择)。它们以或多或少透明的方式在数据库和内存数据视图之间架起桥梁,并避免了在SQL数据库和XML案例中编写的大量粘合代码。

答案 1 :(得分:1)

我认为你正在寻找序列化。试试这个:

http://java.sun.com/developer/technicalArticles/Programming/serialization/

答案 2 :(得分:1)

如前所述,serialization正是您所寻找的。它允许您将对象写入文件,并稍后以最小的努力将其读回。该文件将自动作为对象类型读回。这比使用XML自己存储对象要容易得多。

答案 3 :(得分:0)

Java序列化存在一些缺陷(比如更新类时)。我会以文本格式序列化。 Json是我的第一选择,但xml和yaml也可以。

通过这种方式,您将拥有一个不依赖于类的二进制版本的文件。

有几个java库:http://www.json.org

一些例子:

http://code.google.com/p/json-simple/wiki/DecodingExamples

http://code.google.com/p/json-simple/wiki/EncodingExamples

要保存并从文件中读取,您可以使用Commons Io

import org.apache.commons.io.FileUtis;
import java.io.File;
...
File dataFile = new File("yourfile.json");
String data = FileUtils.readFileToString(dataFile);

FileUtils.writeStringToFile(dataFile, content);