我使用-D将一堆属性传递给我的java命令。但我想知道有没有办法将这些属性保存在文件中并传递该文件而不进行任何代码更改。
这可能吗?
答案 0 :(得分:1)
您可以使用-D指向属性文件。然后,您可以从文件创建FileReader,实例化属性对象并使用属性对象的load方法从阅读器填充。 它是一个standlaone应用程序还是一个Web应用程序?在第二种情况下,您可以使用getResourceAsStream而不是创建FileReader。
String fileName = System.getProperty("fileName");
Properties props = new Properties();
try (Reader reader = new FileReader(fileName)) {
props.load(reader);
}
答案 1 :(得分:0)
您需要获取主要功能中的String[] 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);
}
}
在其他课程中使用
SomeClass.getProperty("<some property you got>");
以其他方式,您传递给main函数的参数可以是属性文件的路径。
答案 2 :(得分:0)
据我所知,那里没有&#34; -D&#34;等效于提供属性文件,但您可以将文件名作为参数传递并在代码中读取。它不会在没有进行任何代码更改的情况下工作,但这只是一个相当简单的改变:
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));
}
}
}