从其他位置调用程序时,不会加载Java属性

时间:2016-06-20 09:23:24

标签: java

我有一个程序,其中属性文件与我想要运行的程序位于相同的路径中。

属性文件名在程序开头初始化为:

public static final String DEFAULT_PROPERTIES_FILE = "defaultProperties.properties"; 

当程序在其本身所在的目录中运行时,程序运行得非常完美:

java -jar program.jar

从另一个目录运行程序时使用:

java -jar path/program.jar

程序将找不到属性文件并返回:

java.io.FileNotFoundException:defaultProperties.properties(没有这样的文件或目录)

固定

我想出了一个解决方案。可以调用类的路径并提供配置文件的路径。

StringBuilder stringBuilder = new StringBuilder( PolicyBoosterTool.class.getProtectionDomain().getCodeSource().getLocation().getPath() );
String pathToFolderOfJarFile = stringBuilder.substring( 0, stringBuilder.lastIndexOf( "/" ) + 1);

DEFAULT_PROPERTIES_FILE =  pathToFolderOfJarFile + "defaultProperties.properties";

可悲的是,我无法将案件标记为自己解决的问题。对此的任何改进总是受欢迎的。谢谢大家的帮助!

2 个答案:

答案 0 :(得分:0)

您必须指定属性文件的完整路径。如果您没有指定路径,那么它将尝试在您启动jar的同一目录中查找文件。因此FileNotFoundException

一个简单的解决方案是 - 将属性文件的路径定义为命令行参数。

答案 1 :(得分:0)

一种方法是,将属性文件保存在任意位置并让应用程序读取它,使用VM参数

例如:

传递VM Param说prop.path

java -Dprop.path=path/to/your/properties/file -jar path/program.jar

然后你可以用

阅读它
System.getProperty("prop.path")

希望这有帮助。