Java

Пути к файлам в Java, class File...

Я всё же должен разобраться в этих путях, которые мы передаём аргументом в конструктор класса File();
Понятно, что если указать просто название файла (file.txt), то он должен находиться в директории проекта, а если проект находится фиг знает где, а к файлу, который лежит на рабочем столе, я хочу иметь доступ, к такому файлу тоже нужен путь. А чтобы составить такой путь, ведь нужно знать название юзера, а вдруг это вообще linux или mac какой-нибудь, откуда мне знать, что вначале точно будет C:/, а вдруг у юзера вообще не будет диска С?
Какие уроки я бы не смотрел, что бы не читал: везде просто, укажите путь до файла.
Единственное, нагуглив проблему, был там такой способ "./dir1/dir2/file.txt", но это, как я понял, файл, который лежит в папке проекта + указанный путь, наверное, точно не знаю ;)
Так вот, какими махинациями стоит прознаться, чтобы владеть путями, как истинный маг?
1. Причем здесь вообще проект? У конечного пользователя ПО не будет никакой папки проекта. Будет папка с инсталлированным софтом. Инсталлятор должен позаботиться о том, чтобы в файле настроек были корректные пути и чтобы на рабочем столе были корректные иконки.

2. В линуксе все пути прибиваются гвоздями. Т. е. для обычного ПО это какой-то /opt/<имя разрабочика/компании>/<имя проекта> (в винде при инсталляции пользователь может вместо дефолтового задать произвольный, в linux диалога с пользователем при инсталляции не ведут). Там лежат ресурсы, имеющие доступ на запись только для администратора, поэтому проект (который запускается разными пользователями) сохраняет настройки и прочие результаты не там, а в рабочей папке пользователя, где создаются скрытые папки вида ~/.soft1 или ~/.company/soft1. Вот в таком виде эти пути и нужно использовать.

3. В винде настройки хранятся преимущественно в реестре, там также есть пути, предназначенные изначально для того, чтобы софт создал свою ветку с именем организации/софта. Если нужно работать именно с файлами (что более логично для явы), сохранять их нужно опять таки не по месту размещения инсталляции, а в папке с документами пользователя, так как пользователь может быть ограничен на запись только этой папкой (плюс временными). Папка находится вызовом FileSystemView.getFileSystemView().getDefaultDirectory().getPath() или подобными, как под Win, так и под Linux.
Александр Решетников
Александр Решетников
30 155
Лучший ответ
Дмитрий Кудлаенко У меня, если запустить jar, то все файлы создаются по его пути, при условии, что в Path просто нзвание файла
Александр Решетников подозреваю, что не по его пути, а по текущему, они могут отличаться. Впрочем, это смотря как реализовано
Александр Решетников В каких-то случаях создание файлов по текущему пути обосновано, например для консольных утилит
Насколько я знаю, с помощью класса System можно узнать информацию о системе, то есть можно узнать, какая у пользователя ОС.
Также с помощью класса System можно узнать название папки пользователя: System.getProperty("user.home") — эквивалентно C://Users/UserName.

Приятель, учись гуглить :)
Сергей Иванов
Сергей Иванов
1 675
Komanev Konctantin >> Приятель, учись гуглить :)

И это пишите вы, Аркадий?)