Есть ли способ для моего приложения выяснить, где в файловой системе оно установлено, а затем безопасно читать / писать?
Вы можете прочитать системное свойство user.dir
, чтобы узнать путь, по которому приложение было запущено в . Обратите внимание, что user.dir
является свойством только для чтения, то есть вы не можете изменить «текущий каталог», установив свойство user.dir
. Вы читаете системные свойства с помощью метода System.getProperty(String)
. Это не то же самое, что «установлен в», но это может работать. Но это слабовато.
Если вы действительно хотите указать местоположение установочного каталога, либо вынудите пользователя установить переменную среды (MYAPP_HOME), либо просканируйте всю файловую систему. Лично мне не нравятся эти варианты.
На самом деле, и если данные относятся к конкретному пользователю, на мой взгляд, лучшим выбором будет чтение / запись данных в домашнем каталоге пользователя (используйте системное свойство user.home
, чтобы получить их), например, что-то вроде ~/.yourapp
(пользователи Windows никогда не заходят в свои %USER_HOME%
в любом случае) или, что еще лучше, в каталог, следующий за Freedesktop Базовая директория XDG (очевидно, об этом будут заботиться только пользователи Linux).
Затем, для чтения / записи, просто используйте java.io.File
, который является кросс-платформенным при правильном использовании (например, используйте File.separator
, если вам нужно построить путь, не используйте жестко закодированную версию имени- сепаратор).