gpt4 book ai didi

Java - 如何在文件中存储(多子)树?

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:25 25 4
gpt4 key购买 nike

我正在开发 open-source, cross-platform具有统计支持的番茄计时器。

对于任务,我有一个像这样的树数据结构:

class Task {
String name;
int minutesWorkedOn;
int uniqueID;
Task parent;
...
ArrayList<Task> childTasks; //Note, not binary, but can have n-children.
}

(实际上是 bit bigger)

我想在 session 之间将此数据结构存储在文件中。我正在考虑 JSON 或 xml,并递归子任务,或者写出所有任务,每行一个任务,然后通过任务 ID 将事情重新组合在一起。但 JSON/XML 并不是硬性要求,我只是大声思考而已。

一些 S.O 答案提到了序列化,但最好我希望能够看到存储的数据结构,就像 JSON 或 XML 的情况一样。此外,这两种格式将使构建报告工具变得更加容易。

考虑到我是 java 新手,以前没有使用过文件/I/O,有人可以给我提示/建议,告诉我应该采取哪条路线吗?

[编辑]
下面的解决方案效果很好。你的循环有问题。我编辑了上面的代码,任务有一个到其父级的反向链接。这会导致 gson 崩溃。我可能会忽略此字段并在加载数据后再次修复它,或者阅读有关教程的更多内容。

最佳答案

最好、最简单的方法是使用 Gson将对象写入/读取到文件。

写:

//Get the json serialization of the task object
GsonBuilder builder = new GsonBuilder();
//builder.setPrettyPrinting().serializeNulls(); //optional
Gson gson = builder.create();
String json = gson.toJson(task);
try {
//write json string to a file named "/tmp/task.json"
FileWriter writer = new FileWriter("/tmp/task.json");
writer.write(json);
writer.close();
} catch (IOException e) {e.printStackTrace();}

阅读:

Gson gson = new Gson();  
try {
BufferedReader br = new BufferedReader(new FileReader("/tmp/task.json"));
//convert the json string from file back to object
Task task = gson.fromJson(br, Task.class);
} catch (IOException e) {
e.printStackTrace();
}

关于Java - 如何在文件中存储(多子)树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28287844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com