Один из способов - использовать системное свойство, 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
если ничего не было передано.