我有一个配置值的键/值对列表,我想将其存储为Java属性文件,然后进行加载和遍历。

问题:

我是否需要将文件存储在与装入它们的类相同的包中,或者它应该放置在任何特定的位置? 文件是否需要以任何特定的扩展名结束,或者。txt OK? 如何在代码中加载文件 我如何遍历里面的值?


当前回答

在我看来,当我们可以非常简单地做到如下所示时,其他方法是不可取的:

@PropertySource("classpath:application.properties")
public class SomeClass{

    @Autowired
    private Environment env;

    public void readProperty() {
        env.getProperty("language");
    }

}

这很简单,但我认为这是最好的方法!! 享受

其他回答

默认情况下,Java在应用程序的工作目录中打开它(这种行为实际上取决于所使用的操作系统)。要加载一个文件,请执行:

Properties props = new java.util.Properties();
FileInputStream fis new FileInputStream("myfile.txt");
props.load(fis)

因此,任何文件扩展名都可以用于属性文件。此外,文件也可以存储在任何地方,只要您可以使用FileInputStream。

需要注意的是,如果使用现代框架,该框架可能提供打开属性文件的其他方法。例如,Spring提供了一个ClassPathResource来从JAR文件中使用包名加载属性文件。

至于遍历属性,一旦加载了属性,它们就存储在java.util.Properties对象中,该对象提供了propertyNames()方法。

有很多方法来创建和读取属性文件:

将文件存储在同一个包中。 推荐.properties扩展名,但你可以选择自己的。 使用java中的这些类。util package =>属性,ListResourceBundle, ResourceBundle类。 要读取属性,请使用properties或java.lang.System类的迭代器或枚举器或直接方法。

ResourceBundle类:

 ResourceBundle rb = ResourceBundle.getBundle("prop"); // prop.properties
 System.out.println(rb.getString("key"));

属性类:

Properties ps = new Properties();
ps.Load(new java.io.FileInputStream("my.properties"));

在顺序:

您可以将文件存储在几乎任何地方。 不需要延期。 Montecristo已经说明了如何加载这个。这应该没问题。 propertyNames()提供了一个用于迭代的枚举。

You can store the file anywhere you like. If you want to keep it in your jar file, you'll want to use Class.getResourceAsStream() or ClassLoader.getResourceAsStream() to access it. If it's on the file system it's slightly easier. Any extension is fine, although .properties is more common in my experience Load the file using Properties.load, passing in an InputStream or a StreamReader if you're using Java 6. (If you are using Java 6, I'd probably use UTF-8 and a Reader instead of the default ISO-8859-1 encoding for a stream.) Iterate through it as you'd iterate through a normal Hashtable (which Properties derives from), e.g. using keySet(). Alternatively, you can use the enumeration returned by propertyNames().

下面是遍历属性的另一种方法:

Enumeration eProps = properties.propertyNames();
while (eProps.hasMoreElements()) { 
    String key = (String) eProps.nextElement(); 
    String value = properties.getProperty(key); 
    System.out.println(key + " => " + value); 
}