Кроссплатформенный способ запросить папку с документами пользователя? - PullRequest
9 голосов
/ 08 апреля 2011

Я пишу кроссплатформенную программу на Java и хочу вставить файлы конфигурации в папку документов пользователя («Мои документы» в Windows, «Документы» в соответствующем Linux и все, что называется папкой в ​​Mac OS), но я не уверен, как спросить об этом у Java.

Я бы хотел избежать жестко кодируемых вещей (выполните X , если мы находимся в Windows, Y , если мы работаем в Linux, или Z , если мы работаем в OS X), поскольку это ложится бременем поддержки на мои плечи, а не на команду разработчиков Oracle.

Я проверил список свойств системы, но, похоже, он не включает папку документов пользователя.

Ответы [ 6 ]

7 голосов
/ 08 апреля 2011

К сожалению, нет простого кроссплатформенного пути.Вам придется воспользоваться преимуществами собственной функциональности на каждой платформе ОС

  • Вот некоторая информация о том, как это сделать, в osx
  • Вот некоторая информация окак это сделать в windows

Для Linux у меня нет удобной ссылки, но, учитывая, что в Linux не обязательно концепция папки Documents, яне знаю хорошего решения.Системное свойство user.home должно быть как минимум допустимым в Linux.

2 голосов
/ 05 октября 2011

Частичное решение:

логическое значение isMac = System.getProperty ("os.name"). Equals ("Mac OS X");

Или используйте http://commons.apache.org/vfs/ дляполучить операционную систему: http://commons.apache.org/vfs/apidocs/org/apache/commons/vfs2/util/Os.html

// имя папки одинаково на любом языке Mac OSX.

Mac: System.getProperty ("user.home") + File.separator + "Documents");

/ Пользователи / Дэвид / Документы

Win: System.getenv ("APPDATA"));

C: \ Documents and Settings \ david \ Application Data

1 голос
/ 08 апреля 2011

Предполагая, что это приложение, которое требует установки, почему бы не попросить пользователя указать местоположение во время установки.Сгенерируйте скрипт запуска, используя эту информацию, которая установит соответствующие переменные среды.Как правило, пользователь не должен запускать команду java!

Когда пользователь запускает приложение, используя этот скрипт запуска, приложение может читать переменные среды.

В качестве альтернативы, создатьJAR-файл с файлами конфигурации.Прочитайте файлы конфигурации, используя getResourceAsStream Classloader.Пока jar конфигурации находится под classpath, вы можете получить доступ к файлам.Это также имеет дополнительное преимущество, заключающееся в сокрытии конфигурации от случайного изменения.Это должно работать и для папок (если пользователь должен изменить конфигурацию).

1 голос
/ 08 апреля 2011

Обычно это невозможно сделать в общем виде. Вам придется использовать зависимые от платформы абстракции. Я делаю это так для AppData, например, в Windows я определяю AppData / Roaming или AppData / Local, в зависимости от данных, которые мне нужно сохранить, на других платформах я создаю папку ".myappname" в домене пользователя и использую это.

Для папки с документами вам придется прочитать реестр. До Windows Vista использование user.home Propery + "/ Documents" не достаточно, потому что в других языках это может быть "/ Dokumente" (немецкий) или что-то еще. Просто в реестре есть реальный путь к этой папке.

На платформах Linux это зависит от среды рабочего стола. Вам просто нужно попробовать это. Gnome и KDE используют разные места для хранения папки Documents, IMHO. И если вы просто используете там FVWM, для документов нет предопределенного места, кроме свойства user.home, что является хорошим запасным вариантом.

1 голос
/ 08 апреля 2011

Спросите пользователя, каким-либо образом, где он хочет сохранить данные, или используйте текущий каталог (простые относительные пути) и предоставьте соответствующие инструкции по настройке. Одним из способов «спрашивать» является наличие свойства, которое можно установить через командную строку.

Не просто загрязняйте домашний каталог пользователя материалами вашего приложения - откуда вы знаете, как им организовано их дерево документов?

Мне абсолютно надоели * nix-ориентированные программы, которые сбрасывают свои маленькие файлы настроек и папки с данными в корень папки с документами.

0 голосов
/ 08 апреля 2011

Что плохого в жестком кодировании способа получения пути в зависимости от операционной системы пользователя?Могут быть большие различия и ОС работают по-разному с разными именами.Просто при запуске найдите путь к папке с документами в зависимости от их ОС и продолжайте ссылаться на этот путь везде, где это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...