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

Java-如何在文件中存储(多个子)树?,java,file-io,data-structures,tree,Java,File Io,Data Structures,Tree,我正在开发一个具有统计支持的pomodoro计时器 对于任务,我有如下树数据结构: class Task { String name; int minutesWorkedOn; int uniqueID; Task parent; ... ArrayList<Task> childTasks; //Note, not binary, but can have n-children. } 类任务{ 字符串名; 工作分钟数; 国际唯一性

我正在开发一个具有统计支持的pomodoro计时器

对于任务,我有如下树数据结构:

class Task {
    String name; 
    int minutesWorkedOn;
    int uniqueID;
    Task parent;
    ...
    ArrayList<Task> childTasks; //Note, not binary, but can have n-children.
}
类任务{
字符串名;
工作分钟数;
国际唯一性;
任务父级;
...
ArrayList childTasks;//注意,不是二进制的,但可以有n个子项。
}
(实际上,这是一个很好的例子)

我想在会话之间将此数据结构存储在一个文件中。 我在考虑JSON或xml,并对childTasks进行递归,或者写出所有任务,每行一个任务,然后通过taskID将它们重新组合起来。但JSON/XML并不是一个硬性要求,我只是想大声说出来

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

考虑到我是java新手,以前从未使用过File/I/O,有人能给我一些建议吗

[编辑]

下面的解决方案效果良好。这是一个与循环有关的问题。我编辑了上面的代码,一个任务有一个指向其父任务的反向链接。这会导致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 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();  
}