2010-08-11 4 views
5

У нас есть соединение для объединения (jar-файл) для одного из наших приложений. На данный момент сведения о соединении приложений в комплекте с файлом jar (в файле .properties).Как файл jar может читать внешний файл свойств

Можем ли мы сделать его более общим? Можем ли мы сообщить клиенту данные файла свойств (как путь, так и имя файла) и использовать банку для получения соединения?

ли смысл иметь что-то вроде этого в коде клиента ..

XyzConnection con = connectionIF.getConnection(uname, pwd); 

наряду с этим, клиент будет указать (как-то ???) свойство файл детали, которые имеют - URL-адрес в подключения, тайм-аут и т.д.

ответ

5

Просто загрузите свойства из файла, что-то вроде

Properties properties = new Properties(); 
InputStreamReader in = null; 
try { 
    in = new InputStreamReader(new FileInputStream("propertiesfilepathandname"), "UTF-8"); 
    properties.load(in); 
} finally { 
    if (null != in) { 
     try { 
      in.close(); 
     } catch (IOException ex) {} 
    } 
} 

Обратите внимание, как кодирование явно указано в UTF-8 выше. Он также может быть опущен, если вы принимаете стандартную кодировку ISO8859-1, но будьте осторожны с любыми специальными символами.

13

Простейший путь, используйте ключ -D, чтобы определить системное свойство в командной строке java. Это системное свойство может содержать путь к вашему файлу свойств.

например

java -cp ... -Dmy.app.properties=/path/to/my.app.properties my.package.App 

Затем в коде вы можете сделать (обработка исключений не показаны для краткости):

String propPath = System.getProperty("my.app.properties"); 

final Properties myProps; 

if (propPath != null) 
{ 
    final FileInputStream in = new FileInputStream(propPath); 

    try 
    { 
     myProps = Properties.load(in); 
    } 
    finally 
    { 
     in.close(); 
    } 
} 
else 
{ 
    // Do defaults initialization here or throw an exception telling 
    // that environment is not set 
    ... 
} 
0

Простейшее путь ниже. Он будет загружать application.properties из cfg-папки за пределами файла jar.

Структура каталогов

|-cfg<Folder>-->application.properties 
    |-somerunnable.jar 

Код:

Properties mainProperties = new Properties(); 
    mainProperties.load(new FileInputStream("./cfg/application.properties")); 
    System.out.println(mainProperties.getProperty("error.message")); 
-1
public static String getPropertiesValue(String propValue) { 
     Properties props = new Properties(); 
     fileType = PCLLoaderLQIOrder.class.getClassLoader().getResourceAsStream(propFileName); 
     if (fileType != null) { 
      try { 
       props.load(fileType); 
      } catch (IOException e) { 
       logger.error(e); 
      } 
     } else { 
      try { 
       throw new FileNotFoundException("Property file" + propFileName + " not found in the class path"); 
      } catch (FileNotFoundException e) { 
       logger.error(e); 
      } 
     } 
     String propertiesValue = props.getProperty(propValue); 
     return propertiesValue; 
    } 

выше методы работает для меня, просто хранить файл свойств в каталог, из которого запустить банку и предоставить это имя на месте propFileName, когда вы хотите, чтобы любое значение из свойства вызывало только getPropertyValue("name").

+1

Это неразборчиво. –

1

Это мое решение. Первый ищет app.properties в папке автозагрузки, если не существует пытаться загрузить из вашего пакета банки

File external = new File("app.properties"); if (external.exists()) properties.load(new FileInputStream(external)); else properties.load(Main.class.getClassLoader().getResourceAsStream("app.properties"));

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