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

Java - how to store a (multi-child) tree in file?

我正在研究 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

我想在会话之间将此数据结构存储在一个文件中。 我正在考虑 JSON 或 xml,并递归 childTasks,或者写出所有任务,每行一个任务,然后通过 taskID 将事情拼凑起来。但是 JSON/XML 不是硬性要求,我只是在大声思考。

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

考虑到我是 java 的新手并且之前没有使用过 File/I/O,有人可以给我一个 tip/advise 来这里走哪条路线吗?

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

最好和最简单的方法是使用 Gson 将对象 write/read 写入文件。

写入:

//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();  
}