我是JAVAFX的新手。我刚开始研究如何存储用户文件,在我的情况下我不想使用XML。我正在创建一个过去在perl中完成的工具的新版本。用户文件是基于文本的,并使用专有定义完成。
作为一个例子
PROJECT_NAME some_device;
DATA_BUS_WIDTH 32;
LINE_TYPE_A name_A mask:0xFFFFFFFF default:0x00000000 "Some documentation about this line type
SUB_LINE_TYPE_A_0 sub_name_0 PROP0 "Some documentation about what the sub line does";
SUB_LINE_TYPE_A_1 sub_name_1 PROP0 "Some documentation about what the sub line does";
LINE_TYPE_B name_B PROP_2 Size:0x1000 "Some documentation about this line type - important Linetype B has different properties than the previous line type A"
SUB_LINE_TYPE_B_0 sub_name_0 "Some documentation about what the sub line does";
LINE_TYPE_C name_C Other PROPs "And more documentation"
我正在考虑做的是创建一个文档类,然后创建一个包含每一行的数组。但问题是文档类将包含一组对象,其中有三种(甚至更多)类型的对象。 LINE_TYPE_A,LINE_TYPE_B等对象,每种类型都有不同的属性。我熟悉创建一种对象的数组。创建一个包含多种类型的数组对我来说似乎很奇怪,但似乎应该有一种方法。当我浏览列表时,我必须能够查看每个项目,并说,您是TYPE A或您的TYPE C,所以我可以适当地处理数据。
这是创建自定义文档格式的正确方法吗?或者我还应该做些什么呢?尽管如此,我确实希望远离XML。
答案 0 :(得分:0)
有几种方法可以用来构建这个:
A)定义数据结构,比如说DataLine
,以保存您的数据。它将包含特定行中的所有信息:TYPE
,name
等。然后继续您想要执行的操作:
class Document {
//array or list or some other collection type of `DataLine`
DataLine[] lines;
void doStuff() {
for (DataLine line : lines) {
// line.getType(), line.getName(), etc
}
}
}
B)定义一个基于继承的结构,它将隔离常见的字段/查询方法,例如
// abstract class if you have some common methods or interface
abstract class DataLine {
abstract DataType getType();
}
// some specific data that belongs to only TypeA
class DataLineTypeA extends / implements DataLine {
}
class Document {
//array or list or some other collection type of `DataLine`
DataLine[] lines;
void doStuff() {
for (DataLine line : lines) {
// can also check with getType() if you have it stored
if (line instanceof DataLineTypeA) {
DataLineTypeA typeA = (DataLineTypeA) line;
// do stuff with typeA specific methods
}
// etc.
}
}
}
最后,如果您有正式的数据定义,或者使用像JSON这样的中间格式,您可以创建自己的数据解析器。或者,您可以使用默认的Java serialization mechanism。
使数据持久化