我从java开始,我想知道我应该使用哪种(文本)文件格式来读取一些参数集,例如:
Item1: // the item name is not important
- filename: item1.txt
- contentType: individual
- ...
Item2:
- filename: item2.txt
- contentType: group
- ...
...
目的是提供要加载到数据库中的文件列表,以及文件内容的一些描述。
所以我的问题是:
实际上我的意思是:
List<Header> headers = read_file(headerFileName);
for(Header header : headers){
MyTable table = new MyTable(header.contentType);
table.loadFromFile(header.filename);
}
注意:这个问题类似于What is the best practice for reading property files in Java EE?,但我对Java生态系统知之甚少,所以我无法确定(例如,我知道spring是JavaEE的替代品)。在这里,我试图更精确地满足我的需求,特别是参数的“形状”。
答案 0 :(得分:1)
我建议使用XML文件并使用JAXB加载它们。
为什么呢?由于以下优点:
<强>建模:强>
首先,您需要为&#34; model&#34;创建类。你的参数:
class Parameters {
@XmlElement(name = "item")
public List<Item> items;
}
class Item {
public String fileName;
public String contentType;
}
示例输入XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parameters>
<item>
<fileName>item1.txt</fileName>
<contentType>individual</contentType>
</item>
<item>
<fileName>item2.txt</fileName>
<contentType>group</contentType>
</item>
</parameters>
加载参数
这就是你加载它的方法,它只有1个方法调用:
Parameters p = JAXB.unmarshal(new File("params.xml"), Parameters.class);
for (Item item : p.items)
System.out.println(item.fileName + ": " + item.contentType);
<强>输出:强>
item1.txt: individual
item2.txt: group
为了使输入XML文件更短,更易于阅读,我们可以进行以下更改:
class Item {
@XmlAttribute
public String fileName;
@XmlAttribute
public String contentType;
}
这里我们基本上指定存储/读取Item
的数据作为XML属性而不是子元素。通过此修改,输入XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parameters>
<item fileName="item1.txt" contentType="individual" />
<item fileName="item2.txt" contentType="group" />
</parameters>
如果我们想要修改参数并在运行时保存它们,它就像加载它们一样简单:只有一行。下面我修改了第一项,我还创建并添加了一个新的第三项:
// Modify item #1
p.items.get(0).fileName = "item11.txt";
p.items.get(0).contentType = "short";
// Create and add a new item
Item item3 = new Item();
item3.fileName = "item3.txt";
item3.contentType = "newtype";
p.items.add(item3);
// Save the modified parameters: 1 line:
JAXB.marshal(p, new File("params-out.xml"));
修改参数的输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parameters>
<item fileName="item11.txt" contentType="short"/>
<item fileName="item2.txt" contentType="group"/>
<item fileName="item3.txt" contentType="newtype"/>
</parameters>