Одним із способів буде використання властивості системи, System.getProperty("user.dir");
це дасть вам "Поточний робочий каталог, коли властивості були ініціалізовані". Це, мабуть, те, що ти хочеш. щоб дізнатися, де java
була видана команда, у вашому випадку в каталозі з файлами, які обробляються, навіть незважаючи на те, що власне .jar файл може знаходитися десь ще на машині. В більшості випадків наявність каталогу фактичного .jar-файла не так корисна.
Далі буде роздруковано поточний каталог, звідки була викликана команда, незалежно від того, де знаходиться .class або .jar файл .class-файл.
public class Test
{
public static void main(final String[] args)
{
final String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir);
}
}
якщо ви перебуваєте в /User/me/
і ваш .jar файл , який містить наведений вище код в /opt/some/nested/dir/
командному java -jar /opt/some/nested/dir/test.jar Test
вихід буде current dir = /User/me
.
Ви також повинні як бонус розглянути використання хорошого аналізатора аргументів командного рядка, орієнтованого на об'єкт. Я настійно рекомендую JSAP , Java Simple Argument Parser. Це дозволить вам скористатися System.getProperty("user.dir")
і, можливо, передати щось інше, щоб надмірно їздити на поведінку. Набагато рентабельніше рішення. Це зробило б проходження в каталозі обробляти дуже просто, і мати можливість повернутися назад, user.dir
якщо нічого не було передано.