2014-07-01 4 views
0

Я пытаюсь прочитать свойства, которые находятся снаружи файла jar моего кода. Используя ResourceBundle, но его невозможно прочитать файл свойства locations.properties. Файл свойств находится под папкой resource, и обе папки jar и resource находятся в том же каталоге.Невозможно найти ресурс за пределами jar

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

возможного дубликата [Загрузка ресурсов с использованием GetClass() .getResource()] (http://stackoverflow.com/questions/ 2343187/load-resources-using-getclass-getresource) – CMPS

ответ

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

+1

Я верю, что это будет System.getProperty ("user.dir") вместо getProperties. – Maniek

2
  1. Получить путь к файлу Jar.
  2. Получить родительскую папку этого файла.
  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(); 
        } 
    
+0

Использование ResourceBundle? –

Смежные вопросы