我正在尝试读取位于我的代码的jar文件外部的属性。使用ResourceBundle
但它无法读取属性文件locations.properties
。属性文件位于resource
文件夹下,jar
和resource
文件夹位于同一目录下。
myDir
--> myJar.jar
--> resource
-->locations.properties
我不知道下面的代码有什么问题:
public static ResourceBundle getResourceBundle(String fileName) throws MalformedURLException{
if (resourceBundle == null) {
File file = new File("resource/"+fileName);
URL[] urls = { file.toURI().toURL() };
ClassLoader loader = new URLClassLoader(urls);
resourceBundle = ResourceBundle.getBundle(fileName, Locale.getDefault(), loader);
}
return resourceBundle;
}
这就是调用ResourceBundle
对象的方式:
ResourceBundle locationBundle = null;
try {
locationBundle = ReadPropertyUtil.getResourceBundle(propFileName);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
请指出这段代码有什么问题,并说明了读取外部属性文件的正确方法。
答案 0 :(得分:2)
在InputStreamPath中使用您的属性文件名。
Properties prop = new Properties();
try {
File jarPath=new File(YourClassNameInJar.class.getProtectionDomain().getCodeSource().getLocation().getPath());
String propertiesPath=jarPath.getParentFile().getAbsolutePath();
System.out.println(" propertiesPath-"+propertiesPath);
prop.load(new FileInputStream(propertiesPath+"/resource/locations.properties"));
} catch (IOException e1) {
e1.printStackTrace();
}
答案 1 :(得分:2)
嗯,我自己弄错了。我将fileName附加到目录位置File file = new File("resource/"+fileName);
这是错误的。
我所要做的就是首先使用
获取当前的工作目录名称System.getProperties("user.dir") //this gives me the path of my current directory
并仅将目录名传递给文件对象。
File file = new File("resource/");
然后使用指定的文件名加载包。
resourceBundle = ResourceBundle.getBundle(fileName, Locale.getDefault(), loader);
ResourceBundle自动查看目录并加载fileName