我使用gradle以maven风格构建项目,所以我有以下
src/main/java/Hello.java
和src/main/resources/test.properties
我的Hello.java
看起来像这样
public class Hello {
public static void main(String[] args) {
Properties configProperties = new Properties();
ClassLoader classLoader = Hello.class.getClassLoader();
try {
configProperties.load(classLoader.getResourceAsStream("test.properties"));
System.out.println(configProperties.getProperty("first") + " " + configProperties.getProperty("last"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
这很好用。但是我希望能够在我的项目之外指向.properties
文件,我希望它足够灵活,我可以指向任何位置而不是每次都重建jar 。有没有办法在不使用File API并将文件路径作为参数传递给main方法?
答案 0 :(得分:2)
您可以尝试这个,它将首先尝试从项目主目录加载属性文件,这样您就不必重建jar,如果没有找到则会从classpath加载
public class Hello {
public static void main(String[] args) {
String configPath = "test.properties";
if (args.length > 0) {
configPath = args[0];
} else if (System.getenv("CONFIG_TEST") != null) {
configPath = System.getenv("CONFIG_TEST");
}
File file = new File(configPath);
try (InputStream input = file.exists() ? new FileInputStream(file) : Hello.class.getClassLoader().getResourceAsStream(configPath)) {
Properties configProperties = new Properties();
configProperties.load(input);
System.out.println(configProperties.getProperty("first") + " " + configProperties.getProperty("last"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
您可以将属性文件路径作为参数发送,或将路径设置为环境变量名称CONFIG_TEST
答案 1 :(得分:1)
Archaius可能会完全矫枉过正,但这是管理外部属性的好方法。它是一个用于处理配置的库:配置层次结构,属性文件配置,数据库配置,用户定义源配置。它可能看起来很复杂,但您再也不用担心将半破解决方案再次手动滚动。 “入门”页面上有using a local file as the configuration source部分。