Путаница в текущем рабочем каталоге в методе файла getAbsolutePath
GetAbsolutePath файла имеет тенденцию к тому, что если в конструкторе файла указан относительный путь или просто имя файла, то он разрешит абсолютный путь, добавив префикс текущего рабочего каталога.
Определение текущего рабочего каталога - это каталог, в котором мы запускаем нашу Java-программу. В моем примере моя java-программа находится внутриD:\my-app\src\App.java
Когда я делаю System.out.println(System.getProperty("user.dir"));
Тогда в идеале он должен печатать D:\my-app\src
Но на самом деле это печать D:\my-app
Почему это так?
Ответы
Когда вы запускаете приложение из IntelliJ, его рабочий каталог устанавливается в соответствии с тем, что установлено в «Рабочий каталог» в диалоговом окне «Запуск / отладка конфигураций» .
Там вы можете установить для рабочего каталога фиксированное значение, например D:\my-app\src
. Другой вариант - использовать переменную пути . Список доступных переменных может зависеть от многих вещей - откройте диалоговое окно и посмотрите, что доступно. Один из вариантов, который я вижу, - $FileDir$
это, как мне кажется, каталог с файлом исходного кода.
Думаю, я нашел решение. На самом деле Intellij вызывал проблему, неявно устанавливая папку src в качестве исходной папки. Я нашел его, перейдя в настройку модуля в Intellij. Когда я запустил то же самое из командной строки, D:\my-app\src\
выбран правильный рабочий каталог, т.е.