无法在jar外找到资源

时间:2014-07-01 06:19:11

标签: java resourcebundle properties-file

我正在尝试读取位于我的代码的jar文件外部的属性。使用ResourceBundle但它无法读取属性文件locations.properties。属性文件位于resource文件夹下,jarresource文件夹位于同一目录下。

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();
}

请指出这段代码有什么问题,并说明了读取外部属性文件的正确方法。

2 个答案:

答案 0 :(得分:2)

  1. 获取Jar文件路径。
  2. 获取该文件的Parent文件夹。
  3. 在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

指定的文件