Dlaczego po prostu nie przekazać pliku właściwości jako argumentu do głównej metody? W ten sposób można załadować właściwości w następujący sposób:
public static void main(String[] args) throws IOException {
Properties props = new Properties();
props.load(new BufferedReader(new FileReader(args[0])));
System.setProperties(props);
}
The alternatywę: Jeśli chcesz otrzymać aktualny katalog z plikiem jar trzeba zrobić coś paskudnego, takich jak:
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");
}
... gdzie MyClass
jest klasą z twojego pliku jar. Jednak nie jest to coś, co polecam - co zrobić, jeśli Twoja aplikacja ma wiele instancji MyClass
w ścieżce klas w różnych plikach jar (każdy jar w innym katalogu)? Oznacza to, że nigdy nie można zagwarantować, że MyClass
został załadowany ze słoika, który Twoim zdaniem był.
możliwe duplikat http://stackoverflow.com/questions/775389/accessing-properties-files-outside-the-jar –