java中的实用参数文件读取

时间:2014-10-08 10:28:37

标签: java file-io parameters

我从java开始,我想知道我应该使用哪种(文本)文件格式来读取一些参数集,例如:

Item1:   // the item name is not important
  - filename: item1.txt
  - contentType: individual
  - ...

Item2:
  - filename: item2.txt
  - contentType: group
  - ...

...

目的是提供要加载到数据库中的文件列表,以及文件内容的一些描述。

所以我的问题是:

  • 我应该使用哪种实用的参数文件格式?

实际上我的意思是:

  1. 不需要(额外的)外部库,因此通常使用“标准”java和spring(使用的框架)
  2. 开发成本低:轻松解析加载的文件内容,例如:
  3. List<Header> headers = read_file(headerFileName); for(Header header : headers){ MyTable table = new MyTable(header.contentType); table.loadFromFile(header.filename); }

    1. 文件格式可读性(yaml会很好,但似乎需要外部lib)
    2. 注意:这个问题类似于What is the best practice for reading property files in Java EE?,但我对Java生态系统知之甚少,所以我无法确定(例如,我知道spring是JavaEE的替代品)。在这里,我试图更精确地满足我的需求,特别是参数的“形状”。

1 个答案:

答案 0 :(得分:1)

我建议使用XML文件并使用JAXB加载它们。

为什么呢?由于以下优点:

  • 因为它非常简单。
  • 不需要外部库。
  • 配置文件具有良好的可读性(简单的XML),可以使用任何文本编辑器或高级XML编辑器进行编辑。
  • 它足够灵活,可以在以后将其他数据添加到参数中。
  • 在运行时也很容易从代码中修改/保存参数(参见最后的内容)。
  • 感谢XML,您不必担心字符编码(例如属性文件)。

<强>建模:

首先,您需要为&#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输入

为了使输入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>