我的任务是编写一些代码,这些代码将根据我所处的环境(生产或测试)来提取属性文件。因此,jar文件在每个环境中都是相同的,但是某些变量将根据执行jar的环境而变化。导演看起来像这样:
[ProgramOne.jar ProgramTwo.jar ProgramThree.jar mypropertiesfile.properties]
我需要这些jar中的每个jar才能读取属性文件。我正在这样阅读:
try(InputStream theResourceStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("mypropertiesfile.properties"))
我还没有访问这些环境的权限,并且将有一个非常小的窗口以实现此代码。我的问题是,鉴于我的情况,这是读取属性文件的正确方法吗?这还行吗?我已尝试将此文件加载到本地计算机上,但一切恢复为空。
答案 0 :(得分:3)
如果它在您的计算机上不起作用,则可能在另一台计算机上不起作用。
当我认为您想从同一目录中的外部文件加载属性时,您似乎正在尝试从Jar中加载资源。
尝试以下方法:
with test.properties
与Jar相同的目录中,具有属性 my-property=this is a test
public class Main {
public static void main(String[] args){ new Main().test(); }
/** Usually gets the `JAR` directory or the `bin` when running in IDE */
public String getCodeSourcePath() throws SecurityException, URISyntaxException {
return getClass().getProtectionDomain().getCodeSource().getLocation()
.toURI().getPath();
}
public void test() {
// TODO handle exceptions, unlikely to occur unless you do something weird
String jarPath = getCodeSourcePath();
Properties properties = new Properties();
File file = new File(jarPath, "test.properties");
try (FileInputStream fis = new FileInputStream(file);) {
properties.load(fis);
}
System.out.println(properties.getProperty("my-property"));
}
}
输出:this is a test