2012-10-26 29 views
8

Szukam prostego, międzyplatformowego sposobu na maszynie JVM, aby uzyskać odpowiednie katalogi do przechowywania ustawień aplikacji i danych pamięci podręcznej. Na przykład na Linuksie pod specyfikacje XDG:Proste, wieloplatformowe, aby uzyskać dobrze znane ścieżki pulpitu w Javie?

  • config w ~/.config/appname
  • cache w ~/.cache/appname

Okna rzeczy idzie C\Users\user\Application Data lub coś takiego (na Win 7); Rozumiem, że Mac umieszcza rzeczy pod ~/Library/Application Settings.

Czy istnieje połączenie między platformami, aby uzyskać te lokalizacje ścieżek? Nie udało mi się go znaleźć, ale napotykam na kilka pytań. Czy istnieje jakaś biblioteka, która zaimplementowała poprawną logikę dla większości popularnych platform komputerowych?

Najgorszy przypadek, mogę po prostu sprawdzić user.home i udawać, że wszystko jest oparte na XDG środowisku Linux. Ale jeśli łatwo jest uzyskać odpowiednie katalogi dla systemu operacyjnego użytkownika, chciałbym to zrobić.

Odpowiedz

2

Klasa FileSystemView jest jedyną jaką znam, która zawiera dostęp do niektórych katalogów ogólnych takich jak ten i jest wieloplatformowa. Więcej informacji na ten temat można znaleźć w dokumentacji: Ta klasa zawiera niektóre przydatne metody, takie jak getHomeDirectory() i getDefaultDirectory(). Ta klasa jest używana przez interfejsy Swing dla interfejsów JFileChooser. Wiem, że nie wskazuje bezpośrednio na katalogi config i cache, ale może to być krok w dobrym kierunku dla ciebie.

Dla własnych aplikacji, podchodzę do następnego najlepszego podejścia, próbując stworzyć całą konfigurację i ustawienia zawarte w samej aplikacji - np. utwórz katalog "config" w katalogu, w którym zainstalowana jest aplikacja. Mimo że nie jest to centralne miejsce konfiguracji całego systemu operacyjnego, przynajmniej zachowuje go w kontekście aplikacji java.

2

Zasadniczo konfigurujemy klasę narzędziową, która udostępnia te informacje, głównie w oparciu o właściwość systemową user.home i os.name.

Mamy szereg metod, które pozwalają nam budować lokalizację ścieżki, coś jak ...

SystemUtilities.getApplicationSettingsPath("Name of my awesome app");