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