通过属性文件传递java属性

通过属性文件传递java属性,java,Java,我使用-D将一组属性传递给我的java命令。但我想知道是否有一种方法可以将这些属性保存在一个文件中,并在不进行任何代码更改的情况下传递该文件 这可能吗?您需要获取在主函数中获得的字符串[]args,并将其放入.properties文件中 然后,还将属性文件上载到映射中,然后读取所需的值,而无需反复读取该文件。 这样,每次程序启动时,文件和映射中都会有值 例如: public SomeClass{ private static HashMap<String, String> prop

我使用-D将一组属性传递给我的java命令。但我想知道是否有一种方法可以将这些属性保存在一个文件中,并在不进行任何代码更改的情况下传递该文件


这可能吗?

您需要获取在主函数中获得的
字符串[]args
,并将其放入
.properties
文件中

然后,还将属性文件上载到映射中,然后读取所需的值,而无需反复读取该文件。 这样,每次程序启动时,文件和映射中都会有值

例如:

public SomeClass{

private static HashMap<String, String> propertiesMap = HashMap<String, String>();

public static void main(String[] args) {
     //args are your parameters that you're getting from cmd operation
     createPropertiesFile(args);

}

private static void createPropertiesFile (String[] args) {
//here you will create the file with properties and also the map above
}

public static getProperty(String prop){
     return map.get(prop)==null ? null : map.get(prop);
}
}
public类{
私有静态HashMap属性Map=HashMap();
公共静态void main(字符串[]args){
//args是从cmd操作中获取的参数
createPropertiesFile(args);
}
私有静态void createPropertiesFile(字符串[]args){
//在这里,您将创建具有属性的文件以及上面的映射
}
公共静态getProperty(字符串属性){
返回map.get(prop)=null?null:map.get(prop);
}
}
在其他类中的用法

SomeClass.getProperty("<some property you got>");
SomeClass.getProperty(“”);

通过其他方式,传递给main函数的参数可以是属性文件的路径。

您可以使用-D指向属性文件。然后,您可以从该文件创建文件读取器,实例化properties对象,并使用properties对象的load方法从读取器进行填充。 它是标准应用程序还是web应用程序?在第二种情况下,您可以使用getResourceAsStream而不是创建文件读取器

    String fileName = System.getProperty("fileName");

    Properties props = new Properties();
    try (Reader reader = new FileReader(fileName)) {
        props.load(reader);
    }

据我所知,没有“-D”等价物来提供属性文件,但是您可以将文件名作为参数传递,并在代码中读取它。“不进行任何代码更改”就无法工作,但这是一个相当简单的更改:

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropReader {

    /**
     * @param args
     */
    public static void main(String[] args) {

        String strPropertiesFile = args[0];

        Properties props = new Properties();
        InputStream is = PropReader.class.getResourceAsStream(strPropertiesFile);
        try {
            props.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }

        for(Object key : props.keySet())
        {
            System.out.println(props.getProperty((String)key));
        }
    }
}

问题是,我使用-D传递的属性被第三方jar使用,我不能在那个里更改代码。