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

问题:

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


当前回答

在顺序:

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

其他回答

您可以通过以下方式加载属性文件:

InputStream is = new Test().getClass().getClassLoader().getResourceAsStream("app.properties");
        Properties props =  new Properties();
        props.load(is);

然后你可以使用lambda表达式遍历映射,比如:

props.stringPropertyNames().forEach(key -> {
            System.out.println("Key is :"+key + " and Value is :"+props.getProperty(key));
        });

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

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

1)在类路径中有你的属性文件是很好的,但你可以把它放在项目的任何地方。

下面是如何从类路径加载属性文件并读取所有属性。

Properties prop = new Properties();
InputStream input = null;

try {

    String filename = "path to property file";
    input = getClass().getClassLoader().getResourceAsStream(filename);
    if (input == null) {
        System.out.println("Sorry, unable to find " + filename);
        return;
    }

    prop.load(input);

    Enumeration<?> e = prop.propertyNames();
    while (e.hasMoreElements()) {
        String key = (String) e.nextElement();
        String value = prop.getProperty(key);
        System.out.println("Key : " + key + ", Value : " + value);
    }

} catch (IOException ex) {
    ex.printStackTrace();
} finally {
    if (input != null) {
        try {
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2)属性文件的扩展名为.properties

加载属性文件:

Properties prop = new Properties();
InputStream stream = ...; //the stream to the file
try {
  prop.load(stream);
} finally {
  stream.close();
}

我把.properties文件放在一个存放所有配置文件的目录中,我没有把它与访问它的类放在一起,但这里没有限制。

对于这个名字…为了冗长起见,我使用。properties,如果你不想的话,我认为你不应该把它命名为。properties。

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

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

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

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

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