Допустим, у меня есть основной класс C:\Users\Justian\Documents\
. Как я могу заставить мою программу показать, что она есть C:\Users\Justian\Documents
?
Жесткое кодирование не является вариантом - его нужно адаптировать, если оно перемещено в другое место.
Я хочу сбросить кучу файлов CSV в папку, чтобы программа распознала все файлы, а затем загрузила данные и манипулировала ими. Я действительно просто хочу знать, как перейти к этой папке.
java
path
working-directory
Юстиан Мейер
источник
источник
Ответы:
Один из способов - использовать системное свойство,
System.getProperty("user.dir");
которое даст вам «Текущий рабочий каталог на момент инициализации свойств». Наверное, это то, что вам нужно. чтобы узнать, гдеjava
была введена команда, в вашем случае в каталоге с файлами для обработки, даже если фактический файл .jar может находиться где-то еще на машине. Наличие каталога фактического файла .jar в большинстве случаев не так полезно.Ниже будет распечатан текущий каталог, из которого была вызвана команда, независимо от того, где находится файл .class или .jar, в котором находится файл .class.
если вы находитесь в
/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
если ничего не было передано.источник
user.dir
, очень прост в использовании. System.getProperty ("user.dir");Использовать
CodeSource#getLocation()
. Это отлично работает и с файлами JAR. Вы можете получитьCodeSource
через,ProtectionDomain#getCodeSource()
аProtectionDomain
в свою очередь можно получить черезClass#getProtectionDomain()
.Обновление в соответствии с комментарием OP:
Для этого потребуется жесткое кодирование / знание их относительного пути в вашей программе. Лучше подумайте о добавлении его пути в путь к классам, чтобы вы могли использовать
ClassLoader#getResource()
Или пройти свой путь как
main()
аргумента.источник
getLocation()
методом. Остальные явно не сработают.Печатает что-то вроде:
Обратите внимание, что
File.getCanonicalPath()
выдает проверенное исключение IOException, но удаляет такие вещи, как../../../
источник
источник
Я просто использовал:
...
источник
Paths.get("").toAbsolutePath();
Paths.get("my/file").toAbsolutePath()
получу/my/file
, то это точно не cwd.Если вы хотите получить текущий рабочий каталог, используйте следующую строку
источник
Если вам нужен абсолютный путь к текущему исходному коду, мое предложение:
источник
Кто сказал, что ваш основной класс находится в файле на локальном жестком диске? Классы чаще объединяются в файлы JAR, а иногда загружаются по сети или даже генерируются на лету.
Так что же вы на самом деле хотите делать? Вероятно, есть способ сделать это, не делая предположений о происхождении классов.
источник