Одним из способов будет использование системного свойства 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. Это позволит вам использовать System.getProperty("user.dir")
и, в качестве альтернативы, передать что-то еще, чтобы переопределить поведение. Гораздо более приемлемое решение. Это сделает передачу в каталог для обработки очень простой, и вы сможете вернуться к user.dir
, если ничего не было передано.