Ich schreibe ein plattformübergreifendes Programm in Java und möchte die Konfigurationsdateien in den Dokumentenordner des Benutzers legen ("Eigene Dateien" unter Windows, "Dokumente" unter dem entsprechenden Linux und wie auch immer der Ordner unter Mac OS heißt) , aber ich bin mir nicht sicher, wie ich Java darum bitten soll.
Ich möchte mich von Dingen fernhalten, die hart codieren ( X wenn wir unter Windows sind, Y wenn wir unter Linux sind oder > Z wenn wir auf OS X sind), da dies die Last der Unterstützung auf meine Schultern und nicht auf das Oracle-Entwicklungsteam legt.
Ich habe die Systemeigenschaftenliste überprüft, aber es scheint nicht den Dokumentenordner des Benutzers zu enthalten.
Leider gibt es keinen einfachen plattformübergreifenden Weg. Sie müssen die native Funktionalität auf jeder Betriebssystemplattform nutzen
Für Linux habe ich keinen praktischen Link, aber da es unter Linux nicht unbedingt das Konzept eines Documents-Ordners gibt, kenne ich keine gute Lösung. Die Systemeigenschaft user.home
sollte zumindest unter Linux gültig sein.
Teillösung:
boolean isMac = System.getProperty ("os.name"). ist gleich ("Mac OS X");
Oder verwenden Sie Ссылка , um das Betriebssystem zu erhalten: Ссылка
// Der Ordnername ist unabhängig von der Sprache von Mac OSX identisch.
Mac: System.getProperty ("user.home") + File.separator + "Dokumente");
/ Benutzer / david / Dokumente
Win: System.getenv ("APPDATA"));
C: \ Dokumente und Einstellungen \ david \ Anwendungsdaten
Dies ist normalerweise nicht allgemein möglich. Sie müssen plattformabhängige Apstraktionen verwenden. Ich mache das für AppData, zB unter Windows entdecke ich AppData / Roaming oder AppData / Local, abhängig von den Daten, die ich speichern muss, auf anderen Plattformen erstelle ich einen Ordner ".myappname" im Userhome und benutze diesen.
Für den Dokumentenordner müssen Sie die Registrierung lesen. Vor Windows Vista mit dem user.home propery + "/ Documents" ist das nicht genug, denn in anderen Sprachen könnte es "Dokumente" oder etwas anderes sein. Nur die Registrierung hat den richtigen Pfad zu diesem Ordner.
Auf Linux-Plattformen hängt es von der Desktop-Umgebung ab. Sie müssen es einfach ausprobieren. Gnome und KDE verwenden verschiedene Orte, um den Ordner Dokumente, IMHO, zu speichern. Und wenn Sie nur FVWM dort verwenden, gibt es keinen vordefinierten Ort für Dokumente mit Ausnahme der user.home -Eigenschaft, was ein gutes Fallback ist.
Wenn Sie davon ausgehen, dass es sich um eine Anwendung handelt, für die eine Installation erforderlich ist, fragen Sie den Benutzer, den Speicherort während der Installation anzugeben. Generieren Sie mithilfe dieser Informationen ein Laufskript, mit dem die entsprechenden Umgebungsvariablen festgelegt werden. Als Norm wird nicht erwartet, dass der Benutzer den Befehl java
ausführt!
Wenn der Benutzer die Anwendung mit diesem Ausführungsskript startet, kann die Anwendung die Umgebungsvariablen lesen.
Alternativ können Sie eine JAR-Datei mit Konfigurationsdateien erstellen. Lesen Sie die Konfigurationsdateien mit getResourceAsStream von Classloader. Solange sich das Konfigurationsjar unter dem Klassenpfad befindet, können Sie auf die Dateien zugreifen. Dies hat auch den zusätzlichen Vorteil, dass die Konfiguration vor versehentlicher Änderung geschützt wird. Dies sollte auch für Ordner funktionieren (wenn die Konfiguration vom Benutzer geändert werden muss).
Fragen Sie den Benutzer, wo er Daten speichern möchte, oder verwenden Sie das aktuelle Verzeichnis (einfache relative Pfade) und geben Sie entsprechende Anweisungen für die Einrichtung an. Ein Mittel zum "Fragen" ist eine Eigenschaft, die über die Befehlszeile gesetzt werden kann.
Verschmutzen Sie nicht nur das Home-Verzeichnis des Benutzers mit den Inhalten Ihrer Anwendung - woher wissen Sie, wie ihnen der Dokumentenbaum gefällt?
Ich habe die Nase voll von * nix-orientierten Programmen, die ihre kleinen Konfigurationsdateien und Datenordner in den Stamm meines Dokumentenordners fallen lassen.
Was ist falsch mit der Hardcoding-Möglichkeit, den Pfad abhängig vom Betriebssystem des Benutzers zu erhalten? Es kann große Abweichungen geben und Betriebssysteme funktionieren mit unterschiedlichen Namen unterschiedlich. Einfach beim Start suchen Sie den Pfad des Dokumentenordners basierend auf dem Betriebssystem und verweisen Sie weiter dorthin, wo es gebraucht wird.
Tags und Links java cross-platform