W systemie UNIX i jego pochodnych pliki konfiguracyjne aplikacji znajdują się pod/etc /, podczas gdy w innych systemach Windows. Filozofią java jest "Napisz raz, biegnij wszędzie", a aplikacja idealnie nie powinna dbać o to, na czym działa OS. Ale chcę, aby moja aplikacja ładowała plik konfiguracyjny podczas uruchamiania i muszę podać ścieżkę. W tej chwili ładuję różne lokalizacje plików wyłączając nazwę systemu operacyjnego, ale to nie wydaje się być najlepszą praktyką w Javie. Jak mogę to pogodzić?Sprawdzone metody Java dla lokalizacji plików konfiguracyjnych
Odpowiedz
Kiedy tworzę grę/aplikację, po prostu umieszczam folder zasobów w tej samej ścieżce, co aplikacja. Na przykład w kodzie, katalog będzie miał postać "res/config.yml". W tym samym folderze co jar umieszczasz folder zasobów o nazwie "res". następnie umieść plik w pliku res. Tak więc aplikacja powinna pobrać plik.
W naszej aplikacji używamy różnych lokalizacji do konfiguracji w każdym systemie operacyjnym.
Na Linuksie
/etc/ApplicationName
W Windows
[Użyj Wybrane Install Dir]/conf
Kontrolujemy gdzie wygląd aplikacji za pośrednictwem właściwości systemowej
-Dconf.dir = ścieżka
nie koniecznie, że istnieje prawidłowa odpowiedź w tej sprawie.
Zwykle umieszczam pliki konfiguracyjne w katalogu .<appName>
(zwróć uwagę na punkt wiodący) w domu użytkownika, który jest odczytywany w środowisku wykonawczym przez System.getProperty("user.home")
. Jest to oczekiwana lokalizacja dla użytkowników systemu Linux, podczas gdy w systemie Windows wydaje się nieco egzotyczna (w porównaniu z katalogami profilowymi, takimi jak AppData/Local
lub AppData/Roaming
), nawet jeśli jest to bardzo popularny wybór dla narzędzi wieloplatformowych. Korzystanie z domu obecnego użytkownika oznacza, że zazwyczaj nie masz problemów z prawami dostępu do systemu plików, a zamiast niestandardowej właściwości preferowane jest używanie user.home
, ponieważ jest ono dostarczane z pudełka przez system (i nadal może być przesłonięte)
Innym podejściem jest użycie katalogu instalacyjnego, ale musisz użyć zmiennej środowiskowej, która wskazuje na to, np. $APP_HOME
, ponieważ nie można jej wywnioskować w czasie działania aplikacji (w rzeczywistości można uzyskać katalog JAR wdraża grę, grając z adresami URL zwróconymi przez główną klasę ClassLoader, ale uważam, że jest to hack i nie należy jej używać). Aplikacja może odczytać zmienną za pomocą System.getenv("APP_HOME")
, a ta zmienna musi być ustawiona za pomocą skryptów zależnych od platformy, które udostępniasz w celu uruchomienia aplikacji. Ta strategia ma tę wadę, że bieżący użytkownik może nie mieć praw do odczytu/zapisu do wskazanego katalogu.
- 1. Metody zarządzania plików konfiguracyjnych między wieloma środowiskami
- 2. Sprawdzone metody Python/Flask dla warstwy usługowej
- 3. Sprawdzone metody wdrażania IModelBinder
- 4. Ostrzeżenie ostrzegawcze PhpMyAdmin dla plików konfiguracyjnych
- 5. Sprawdzone metody obsługi ciągów Azure
- 6. Sprawdzone metody - Rejestrowanie zapisanych procedur
- 7. Instalacja CMake: instalowanie plików konfiguracyjnych
- 8. Format daty Java dla lokalizacji
- 9. Jakieś sprawdzone metody postępowania z Java EE i java.endorsed.dirs?
- 10. Sprawdzone metody odwołań do JavaScriptu IntelliSense
- 11. Obsługa aktualizacji plików konfiguracyjnych Rpm
- 12. Dynamiczne tworzenie GUI przy użyciu plików konfiguracyjnych
- 13. Zarządzanie przez subversion plików konfiguracyjnych projektu
- 14. Niestandardowe sprawdzone metody UIView i UIViewController?
- 15. Czy NetBeans ma standardowy obszar dla plików konfiguracyjnych wtyczki?
- 16. xdt transformuje dla plików konfiguracyjnych innych niż web.config
- 17. Narzędzia do podglądu transformacji plików konfiguracyjnych
- 18. Wiele plików konfiguracyjnych z Python ConfigParser
- 19. Najlepiej sprawdzone metody Entity Framework i WPF
- 20. Łączenie wielu plików konfiguracyjnych w Visual Studio
- 21. Nieprawidłowe i sprawdzone metody SQL Server
- 22. Jakie są sprawdzone metody nazywania modułów Maven?
- 23. Sprawdzone metody mapowania jednego obiektu na inny
- 24. Jakie są sprawdzone metody zarządzania identyfikatorami zdarzeń?
- 25. Czy złe jest umieszczanie plików właściwości/plików konfiguracyjnych w słoikach?
- 26. Generowanie bazy danych z plików konfiguracyjnych NHibernate
- 27. Najlepszy sposób przechowywania plików konfiguracyjnych w SVN?
- 28. Jak sprawdzić składnię plików konfiguracyjnych PostgreSQL?
- 29. Metody wyodrębniania lokalizacji z tekstu?
- 30. Wszelkie biblioteki Pythona do analizy plików konfiguracyjnych Apache?
Kiedy powinien być przenośny, nie widzę nic złego w jego posiadaniu w katalogu aplikacji. – user432
Java ma już interfejs API preferencji, który obsługuje różnice w systemie operacyjnym. http://docs.oracle.com/javase/7/docs/api/java/util/prefs/Preferences.html –