我有一个程序,其中属性文件与我想要运行的程序位于相同的路径中。
属性文件名在程序开头初始化为:
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";
可悲的是,我无法将案件标记为自己解决的问题。对此的任何改进总是受欢迎的。谢谢大家的帮助!
答案 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")
希望这有帮助。