Java-如何在文件中存储(多个子)树?
我正在开发一个具有统计支持的pomodoro计时器 对于任务,我有如下树数据结构: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. } 类任务{ 字符串名; 工作分钟数; 国际唯一性
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();
}