2013-03-22 5 views
1

Я использую плагин Maven onejar (https://code.google.com/p/onejar-maven-plugin/) для создания uberjar.Maven onejar plugin, получить файл свойств

Я хочу получить доступ к свойствам файла, который находится в корне моего пути к классам, как это:

Properties prop = new Properties(); 

     try { 
      prop.load(new FileInputStream("Db.properties")); 

      driver = prop.getProperty("driver"); 
      url = prop.getProperty("url"); 
      username = prop.getProperty("username"); 
      password = prop.getProperty("password"); 

     } catch (IOException ex) { 
      LOG.debug(ex.toString()); 
     } 

     conn = null; 

Моего log4j.properties файл, который находится в том же каталоге найден, потому что я могу сделать регистрацию ... В чем моя проблема? :/ Но Db.properties не найден.

+0

Является ли Db.properties упакованным в банку? –

+0

Да, я открываю свой reminder.one-jar.jar -> main -> reminder.jar, и в этом файле jar мой файл Db.properties находится по тому же пути, что и log4j.properties – krackmoe

ответ

1

FileInputStream предназначен для загрузки ресурсов из файлов, расположенных в файловой системе. Файлы внутри банки не находятся в файловой системе. Вам нужно использовать другой InputStream.

Для этого случая рекомендуется использовать метод ClassLoader#getResourceAsStream(String). Он возвращает ресурс InputStream, найденный в пути к классам. Что-то вроде:

InputStream is = getClass().getClassLoader().getResourceAsStream("/Db.properties"); 

должно работать. Или для удобства:

InputStream is = getClass().getResourceAsStream("/Db.properties"); 

Следует отметить, что причина, по которой log4j.properties работает потому, что Log4j дизайн может загружать файлы конфигурации в корневом пути к классам.

+1

Mh ... он все еще не работает. . InputStream i = getClass(). GetResourceAsStream ("Db.properties"); \t try { \t \t prop.load ((FileInputStream) i); – krackmoe

+0

Я понял! Я добавил Slash перед Db.properties! Спасибо. – krackmoe

+0

@ krackmoe спасибо за исправление. –