Я всё же должен разобраться в этих путях, которые мы передаём аргументом в конструктор класса File();
Понятно, что если указать просто название файла (file.txt), то он должен находиться в директории проекта, а если проект находится фиг знает где, а к файлу, который лежит на рабочем столе, я хочу иметь доступ, к такому файлу тоже нужен путь. А чтобы составить такой путь, ведь нужно знать название юзера, а вдруг это вообще linux или mac какой-нибудь, откуда мне знать, что вначале точно будет C:/, а вдруг у юзера вообще не будет диска С?
Какие уроки я бы не смотрел, что бы не читал: везде просто, укажите путь до файла.
Единственное, нагуглив проблему, был там такой способ "./dir1/dir2/file.txt", но это, как я понял, файл, который лежит в папке проекта + указанный путь, наверное, точно не знаю ;)
Так вот, какими махинациями стоит прознаться, чтобы владеть путями, как истинный маг?
Java
Пути к файлам в Java, class File...
1. Причем здесь вообще проект? У конечного пользователя ПО не будет никакой папки проекта. Будет папка с инсталлированным софтом. Инсталлятор должен позаботиться о том, чтобы в файле настроек были корректные пути и чтобы на рабочем столе были корректные иконки.
2. В линуксе все пути прибиваются гвоздями. Т. е. для обычного ПО это какой-то /opt/<имя разрабочика/компании>/<имя проекта> (в винде при инсталляции пользователь может вместо дефолтового задать произвольный, в linux диалога с пользователем при инсталляции не ведут). Там лежат ресурсы, имеющие доступ на запись только для администратора, поэтому проект (который запускается разными пользователями) сохраняет настройки и прочие результаты не там, а в рабочей папке пользователя, где создаются скрытые папки вида ~/.soft1 или ~/.company/soft1. Вот в таком виде эти пути и нужно использовать.
3. В винде настройки хранятся преимущественно в реестре, там также есть пути, предназначенные изначально для того, чтобы софт создал свою ветку с именем организации/софта. Если нужно работать именно с файлами (что более логично для явы), сохранять их нужно опять таки не по месту размещения инсталляции, а в папке с документами пользователя, так как пользователь может быть ограничен на запись только этой папкой (плюс временными). Папка находится вызовом FileSystemView.getFileSystemView().getDefaultDirectory().getPath() или подобными, как под Win, так и под Linux.
2. В линуксе все пути прибиваются гвоздями. Т. е. для обычного ПО это какой-то /opt/<имя разрабочика/компании>/<имя проекта> (в винде при инсталляции пользователь может вместо дефолтового задать произвольный, в linux диалога с пользователем при инсталляции не ведут). Там лежат ресурсы, имеющие доступ на запись только для администратора, поэтому проект (который запускается разными пользователями) сохраняет настройки и прочие результаты не там, а в рабочей папке пользователя, где создаются скрытые папки вида ~/.soft1 или ~/.company/soft1. Вот в таком виде эти пути и нужно использовать.
3. В винде настройки хранятся преимущественно в реестре, там также есть пути, предназначенные изначально для того, чтобы софт создал свою ветку с именем организации/софта. Если нужно работать именно с файлами (что более логично для явы), сохранять их нужно опять таки не по месту размещения инсталляции, а в папке с документами пользователя, так как пользователь может быть ограничен на запись только этой папкой (плюс временными). Папка находится вызовом FileSystemView.getFileSystemView().getDefaultDirectory().getPath() или подобными, как под Win, так и под Linux.
Дмитрий Кудлаенко
У меня, если запустить jar, то все файлы создаются по его пути, при условии, что в Path просто нзвание файла
Александр Решетников
подозреваю, что не по его пути, а по текущему, они могут отличаться. Впрочем, это смотря как реализовано
Александр Решетников
В каких-то случаях создание файлов по текущему пути обосновано, например для консольных утилит
Насколько я знаю, с помощью класса System можно узнать информацию о системе, то есть можно узнать, какая у пользователя ОС.
Также с помощью класса System можно узнать название папки пользователя: System.getProperty("user.home") — эквивалентно C://Users/UserName.
Приятель, учись гуглить :)
Также с помощью класса System можно узнать название папки пользователя: System.getProperty("user.home") — эквивалентно C://Users/UserName.
Приятель, учись гуглить :)
Похожие вопросы
- Ребят, привет, мне необходимо открыть исполняемый файл Jar, установила java на ноут, т.к. файл открывается как архив
- Изменение строки файла формата class
- Всем привет. Помогите плз. Мне нужна помощь тех кто действительно хорошо знает Java т. к мне нужно выбрать один из курсов
- Как можно запустить строчку java кода которая хранится в txt файле?
- Помогите доделать код на java. В форму пользователь вводит символ, который нужно заменить на #.
- Не выводит изображение в JAVA
- Java проблема с рефлексией.
- Java Developer vs Android Developer. Куда дальше?
- Пишут ли стартапы на Java?
- С какой книги начинать изучение Java?