Если вы используете относительные пути в Java, они будут разрешены относительно рабочего каталога запущенного приложения. Итак, вам нужно знать, какой будет рабочий каталог.
Когда вы запускаете приложение в IDE, рабочий каталог зависит от IDE и конфигураций программы запуска. Но обычно это каталог файловой системы, который соответствует началу проекта.
Следует также отметить, что папка src
, которую вы видите, является особенной. Записи в нем обычно не являются файлами и каталогами. Обычно это Java пакетов и классов. Таким образом, в файловой системе «sr c»> «com.company»> «Main» фактически представлен как файл с путем «src / com / company / Main. java».
Это означает, что помещать произвольные папки и файлы в папку «sr c» неправильно. Это будет работать ... но концептуально неверно. Файлы данных не принадлежат дереву исходных текстов, и уж тем более файлам данных, написанным вашим приложением. (И когда вы начнете использовать систему управления версиями, вы обнаружите, что запись файлов данных в исходное дерево вызовет у вас головную боль. Я не буду go вдаваться в подробности ... но я почти уверен, что вы будет пожалеть об этом.)
Другая вещь, которая концептуально неверна в том, что вы делаете, - это то, что Java программы обычно написаны как отдельные вещи. Пользователю вашей программы не нужно загружать и устанавливать Intellij или другую IDE и загружать в нее ваш проект. Они захотят просто запустить его из файла JAR. В этом мире каталог проекта и папка «sr c» не будут существовать, и жесткие относительные пути, такие как «src / Test», будут проблематичными. c.
Так что давайте игнорировать это пока и посмотрите, что ваш код в настоящее время делает
Правильно ли размещена папка «Test»? если нет, как мне получить к нему доступ? Как видите, он находится внутри com.company, следует ли мне переместить его в sr c?
Согласно изображению, папка Test
(фактически пакет) >> находится << в папке <code>src Папка.
Когда я пытаюсь проверить, существует ли, появляется сообщение false.
Ваш код использует неправильный путь. Если папка «Test» находится там, где она у вас есть (как показано на рисунке!), Относительный путь должен быть «src / Test», а не «Test» или «com / company / Test».
Обратите внимание, что Windows принимает либо «/», либо «\» будет работать как разделитель файлов, даже если «\» - это то, что используется обычно.
f.getParent()
говорит null
.
Это правильно. Относительный путь «Тест» не имеет родительской части. Это простое имя файла / каталога.
Подумайте об этом так. Пока File
с относительным путем не будет разрешено , не определено, к какому каталогу он относится.
Но когда я пытаюсь: System.out.println(f.getAbsolutePath());
он показывает правильно весь путь.
Опять же, правильно.
Когда вы вызываете f.getAbsolutePath()
на относительном File
, система времени выполнения добавляет путь к рабочему каталогу приложения, а затем дает вы получите результат.
Смысл использования относительного пути заключается в том, что я хочу, чтобы этот код работал на ЛЮБОМ компьютере.
Этот относительный путь НЕ БУДЕТ работать на ЛЮБОМ компьютере. Вы используете путь в дереве src
вашего проекта, и ваш проект обычно не существует на компьютере конечного пользователя. (См. Выше.)
Итак, что вам делать?
Нет единственного правильного ответа.
- Вы можете поместить файл / каталог в папку пользователя текущий / рабочий каталог.
- Вы можете поместить файл / каталог в пользовательский домашний каталог или скрытый подкаталог в домашнем каталоге. (Это общий подход для Linux.)
- Вы можете сделать путь к каталогу аргументом командной строки
- Вы можете получить путь из переменной среды
- Путь можно получить из файла конфигурации c приложения.
Лучший ответ будет зависеть от контекста.