Найти каталог для "данных приложения" на linux и macintosh

У меня есть игровой движок, основанный на LWJGL, и для его запуска мне нужно поместить необходимые пользовательские библиотеки на пользовательский компьютер. В Windows я делаю это путем поиска каталога данных приложения через:

System.getenv("APPDATA");

и все работает легко и красиво. Я создаю объект File, при необходимости вызываю mkDir и записываю файлы, если они еще не находятся на машине.

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

Однако я бы хотел сделать что-то подобное, если компьютер Macintosh или Linux, но я не так хорошо знаком с тем, как это сделать с этими двумя системами, и я не очень хорошо разбираюсь в этом. Мой текущий метод поиска целевого каталога таков:

private static String defaultDirectory()
{
    String OS = System.getProperty("os.name").toUpperCase();
    if (OS.contains("WIN"))
        return System.getenv("APPDATA");
    else if (OS.contains("MAC"))
        return System.getProperty("user.home") + "/Library/Application "
                + "Support";
    else if (OS.contains("NUX"))
        return System.getProperty("user.home");
    return System.getProperty("user.dir");
}

Итак, это правильный способ сделать это? Я пытаюсь достичь поддержки приложений на Mac (я узнал, что это эквивалент папки AppData в Windows), и я пытаюсь использовать подобную папку в Linux, но я не уверен, что "пользователь. home" находит правильный вариант.

Ответы

Ответ 1

это должно работать. просто одно: на linux предпочтительнее сохранять настройки в скрытой папке в каталоге пользователя. Поэтому для linux либо поместите свою папку под $HOME/.config, либо запустите имя с помощью ., чтобы сделать его скрытым.

Ответ 2

Как уже говорилось в Linux, вы должны/могли бы поместить ваши данные в .directory в доме.

У меня есть, однако, совет для вас: "APPDATA", к сожалению, не всегда находит правильный каталог в нескольких WindowsVersions. AFAIK единственный способ знать, как правильно это сделать, вызывает функцию msdn, называемую SHGetFolderPath.

Пример: http://github.com/fab1an/appkit/blob/master/src/main/java/org/appkit/osdependant/OSFolders.java