Почему бы просто не передать файл свойств в качестве аргумента в свой основной метод? Таким образом, вы можете загрузить свойства следующим образом:
public static void main(String[] args) throws IOException {
Properties props = new Properties();
props.load(new BufferedReader(new FileReader(args[0])));
System.setProperties(props);
}
Альтернатива: Если вы хотите, чтобы получить текущий каталог вашего файла банку вам нужно сделать что-нибудь неприятное, как:
CodeSource codeSource = MyClass.class.getProtectionDomain().getCodeSource();
File jarFile = new File(codeSource.getLocation().toURI().getPath());
File jarDir = jarFile.getParentFile();
if (jarDir != null && jarDir.isDirectory()) {
File propFile = new File(jarDir, "myFile.properties");
}
... где MyClass
- это класс из вашего файла jar. Это не то, что я бы рекомендовал - Что делать, если ваше приложение имеет несколько экземпляров MyClass
в пути к классам в разных файлах jar (каждая банка в другом каталоге)? т. е. вы никогда не можете действительно гарантировать, что MyClass
был загружен из банки, как вы думаете.
возможно дубликат http://stackoverflow.com/questions/775389/accessing-properties-files-outside-the-jar –