如何使用Java属性文件?

问题

我有一个配置值的键/值对列表,我想存储为Java属性文件,然后加载和迭代。

问题:

  • 我是否需要将文件存储在与将加载它们的类相同的包中,或者是否存在应放置它的任何特定位置?
  • 文件是否需要以任何特定扩展名结尾或.txt确定?
  • 如何在代码中加载文件
  • 我怎样才能遍历内部的值?

#1 热门回答(233 赞)

你可以将InputStream传递给Property,因此你的文件几乎可以在任何地方,并且可以调用任何内容。

Properties properties = new Properties();
try {
  properties.load(new FileInputStream("path/filename"));
} catch (IOException e) {
  ...
}

迭代为:

for(String key : properties.stringPropertyNames()) {
  String value = properties.getProperty(key);
  System.out.println(key + " => " + value);
}

#2 热门回答(76 赞)

  • 你可以将文件存储在任何你喜欢的位置。如果要将其保存在jar文件中,则需要使用Class.getResourceAsStream()或ClassLoader.getResourceAsStream()来访问它。如果它在文件系统上,则稍微容易一些。
  • 任何扩展都没问题,尽管.properties在我的经验中更常见
  • 如果你使用的是Java 6,则使用Properties.load加载文件,传入InputStream或StreamReader。(如果你使用的是Java 6,我可能会使用UTF-8和Reader而不是默认的ISO-8859 -1编码流。)
  • 当你遍历普通的Hashtable(属性派生自的)时,迭代它,例如,使用keySet()。或者,你可以使用propertyNames()返回的枚举。

#3 热门回答(25 赞)

如果将属性文件放在与Foo类相同的包中,则可以轻松加载它

new Properties().load(Foo.class.getResourceAsStream("file.properties"))

鉴于Properties扩展了Hashtable,你可以以与Hashtable中相同的方式迭代值。

如果你使用* .properties扩展名,则可以获得编辑器支持,例如Eclipse有一个属性文件编辑器。