Как я могу получить системные пользовательские документы, изображения, музыкальные папки независимо от ОС, используя Java? - PullRequest
1 голос
/ 24 мая 2010

Когда я работал над своим проектом, я получил требование: мне нужно получить папку с документами пользователя системы (например, «Мои документы» для Windows и «Документы» для Linux и Mac OS X). Мне нужно получить его для всех операционных систем. Как я могу это сделать?

Я могу получить корневой каталог пользователя, используя System.getProperty("user.home"). Мне нужно решение для этого требования с использованием Java.

Ответы [ 4 ]

3 голосов
/ 24 мая 2010

Расположение системной папки «Documents» или «Pictures» по умолчанию сильно зависит от операционной системы, зависит от распределения, от настроек пользователя. Самое близкое, что я могу придумать, - это начать искать в домашнем каталоге пользователя, который вы можете получить из System.getProperty("user.home").

Затем можно реализовать некоторые эвристики на основе

  • System.getProperty("os.name") Имя операционной системы
  • System.getProperty("os.arch") Архитектура операционной системы (должна быть менее интересной)
  • System.getProperty("os.version") Версия операционной системы
1 голос
/ 24 мая 2010

Это зависит не только от операционной системы к операционной системе, но также от пользователя к пользователю. Моим предложением было бы создать приоритетный список общих имен для этих местоположений, а затем выполнить поиск по списку, возвращая первый каталог в списке, который существует. Если ни один из элементов в списке не существует, вы должны сообщить, что такого каталога не существует, или выдать сообщение об ошибке другого типа. Также было бы неплохо предоставить файл конфигурации или некоторые другие средства, с помощью которых поиск по умолчанию можно было бы переопределить в ситуациях, когда список по умолчанию оказался недостаточным.

1 голос
/ 24 мая 2010

Я полагаю, что в настоящее время Java не предоставляет такой функциональности, поэтому вам придется реализовать собственную абстракцию, которая может использовать системное свойство для определения платформы времени выполнения и выбора соответствующей фабрики для текущей платформы.Затем фабрика вернет папки, специфичные для платформы.

0 голосов
/ 21 декабря 2018

Существующие ответы не являются неправильными, но в них отсутствуют некоторые детали. Есть более полные ответы на SO, но ни один не отвечает на вопрос в целом для наиболее важных операционных систем.

В качестве другого ориентира: .Net Core прикладывает немало усилий для сопоставления эквивалентных специальных папок между операционными системами: https://github.com/dotnet/corefx/blob/master/src/System.Runtime.Extensions/src/System/Environment.Unix.cs (GetFolderPathCoreWithoutValidation).

Джон Кернер сравнивает фактическое расположение этих специальных папок между Windows и Mac OS X .

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