Was ist der plattformübergreifende Weg, um den Pfad zum lokalen Anwendungsdatenverzeichnis zu erhalten?
Was ich brauche ist eine Plattform-unabhängige Art und Weise der Erlangung der Pfad auf das lokale Anwendungsdaten-Verzeichnis. System.getenv("LOCALAPPDATA")
scheint zu funktionieren nur mit Windows. Wie mache ich das?
Kommentar zu dem Problem - Öffnen
Ein weiteres problem ist, dass andere Betriebssysteme nicht auch unterscheiden zwischen lokalen und roaming Teile des Profils 🙂
Siehe auch Erstellen Sie ein temporäres Verzeichnis in Java.
Gestimmt auf die Frage schließen, da ich fand die Antwort in dem anderen thread.
InformationsquelleAutor der Frage missingfaktor | 2012-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man wahrscheinlich sagen, so etwas wie (widersprechen Sie mir, wenn ich falsch bin, oder ob dies ein schlechter Ansatz ist)
Beachten Sie, dass in diesem code, ich bin nicht voll nutzen, dass Java behandelt
'/'
das gleiche wie'\\'
beim Umgang mit Verzeichnissen. Windows verwendet'\\'
als pathSeparator, aber es freut sich mit'/'
auch. (Zumindest Windows 7 ist.) Es ist auch case-insensitive auf environment-Variablen; wir konnte gerade als leicht, sagteworkingDirectory = System.getenv("APPDATA");
und es hätte funktioniert genauso gut.InformationsquelleAutor der Antwort Mike Warren
Für moderate Datenmengen sollten
java.util.prefs.Preferences
erwähnt hier, oderjavax.jnlp.PersistenceService
, diskutiert hier. Beide sind cross-Plattform.InformationsquelleAutor der Antwort trashgod
Den Questen ist alt, aber ich vermisse eine Antwort-listing-environment-vars statt einige lustige absolute Pfade. Ich weiß nichts über OSX. dieser Beitrag nur contaions Informationen über windows und linux.
Habe ich nicht genug Punkte, um die Erweiterung eines bereits vorhandenen Antwort-also ich habe um ein neues zu schreiben.
Linux:
Wie bereits erwähnt, es existiert so etwas wie freedesktop.org die Festlegung eines standard-linux-Distributionen versuchen, Sie zu erfüllen.
Es gibt auch eine Unterseite definieren von environment-Variablen und Ihre Standardwerte (Wenn Sie nicht gesetzt sind, Sie sind standardmäßig leer. Die Anwendung hat entsprechend die variable tp Standard). Link zu dieser Seite: freedesktop.org env vars
Vars definiert, die relevant für diese Frage:
Windows XP:
%APPDATA% (Standard: C:\Documents und Einstellungen{Benutzername}\Anwendungsdaten)
%CommonProgramFiles% (Standard: C:\Program Files\Common Files) (gemeinsam genutzte Dateien)
%CommonProgramFiles(x86)% (Standard: C:\Program Files (x86)\Common Files) (nur 64 bit!) (gemeinsam genutzte Dateien)
%ProgramFiles% (Standard: %SystemDrive%\Program Files)
%ProgramFiles(x86)% (Standard: %SystemDrive%\Program Files (x86) (nur in 64-bit-version)) (nur 64 bit!)
Windows Vista +:
%CommonProgramFiles(x86)% (Standard: C:\Program Files (x86)\Common Files) (nur 64 bit!) (gemeinsam genutzte Dateien)
%ProgramFiles% (Standard: %SystemDrive%\Program Files) (Static data, wil sich nicht ändern nach der installation)
%ProgramFiles(x86)% (Standard: %SystemDrive%\Program Files (x86) (nur in 64-bit-version)) (nur 64 bit!) (Statische Daten, die wil nicht ändern nach der installation)
%ProgramData% (Standard: %SystemDrive%\ProgramData) (Veränderbare Daten, die alle Benutzer)
Kurz:
Linux hat zwei Umgebungsvariablen, die möglicherweise nicht eingestellt werden (einer für die configs, eine für Dateien). Windows hat soweit ich das sagen kann nur eine Umgebung var configs und Dateien zusammen. Bitte verwenden Sie diese anstelle von absoluten Pfaden.
InformationsquelleAutor der Antwort Fjolnir Dvorak
Persönlich fand ich
appdirs
sehr hilfreich für ähnliche Anwendungsfälle. Es hat Funktionen , suchen Sie verschiedene Arten von nützlichen Verzeichnisse:getUserDataDir
getUserConfigDir
getUserCacheDir
getUserLogDir
getSiteDataDir
← wie dieses aussieht ist die, die Sie brauchengetSiteConfigDir
Den Standorten gibt es mehr oder weniger standard:
InformationsquelleAutor der Antwort kirelagin
Das problem ist, dass andere Betriebssysteme nicht auch ein wohl definiertes Konzept des "application data directory". In der Regel ist es nur ein verstecktes Unterverzeichnis im home-Verzeichnis des Benutzers mit einem herkömmlichen Namen, die möglicherweise oder möglicherweise nicht den Namen der Anwendung.
Mechanische Schnecke Kommentare so:
Erstens, es ist nicht
~/.local
. Es ist~/.local/share
. (Oder es ist zumindest auf meinem Linux-Rechner).Zweitens, das ist eine neue Idee. Es scheint stammen aus dem "freedesktop.org" folk, über die XDG Base Directory Specification. Es wird nicht erwähnt, in anderen, allgemein anerkannten Spezifikationen, wie Linux - /UNIX-file-systems organisiert werden sollte. Und beachten Sie, was Sie sagen über Ihre "standards" auf dieser Seite: http://www.freedesktop.org/wiki/
Schließlich, diese Idee wird nicht umgesetzt, die von der Mehrheit der Linux-Befehle. Das ist ziemlich unwissenschaftlich, aber mit Blick auf die versteckten Verzeichnisse auf meinem Linux-Rechner kann ich die Zeichen zu sehen, dass mindestens 40 verschiedene Anwendungen entweder mit
~/
oder ein benutzerdefiniertes Unterverzeichnis. Demgegenüber gibt es Anzeichen dafür, nur 16 Anwendungen in~/.local/share
.Einer Namenskonvention, die implementiert wird durch weniger als 1/3rd der Anwendungen ist kaum ein "gut definiertes Konzept" ... und schon gar nicht in einer Weise, die erlauben würde, zu finden, eine beliebige Anwendung Daten-Verzeichnis in einer tragbaren Weise.
InformationsquelleAutor der Antwort Stephen C
Gibt es keine cross-Plattform-Weg, für, dass, weil die Konzepte, die die verschiedenen OS-s verwenden, sind zu unterschiedlich, zu "abstrahieren". Ich bin nicht vertraut mit *nix-und Mac-Konventionen, aber unter Windows gibt es keine "home-Ordner", und die Anwendung muss angeben, ob es speichern will Sachen in der roaming-Profil (
C:\Users\<username>\AppData\Roaming\<application vendor>\<application name>\
standardmäßig) oder die lokalen Profil (C:\Users\<username>\AppData\Local\<application vendor>\<application name>\
standardmäßig).Beachten Sie, dass Sie nicht hartcodieren diese Pfade, weil auf eine vernetzte installation werden Sie möglicherweise woanders. Sie sollten sich nicht verlassen auf " Umgebungsvariablen entweder, weil Sie kann vom Benutzer verändert werden. Sollte Ihre Anwendung nennen die SHGetKnownFolderPath Funktion der Windows-API.
Den Unterschied zwischen den beiden ist, dass das lokale Profil ist spezifisch für den Anwender und die Maschine, während das roaming-Profil ist spezifisch für die Anwender, also in einem setup wie meinem Uni -, Zeug-apps setzen, die roaming-profile werden auf den server hochgeladen und mit welchem computer ich mich einlogge.
Sollte es sein, die Verantwortung von Anwendungen, zu wählen, ob die Einstellungen, die Sie speichern möchten, sind die lokalen oder roaming. Leider ist Java nicht erlaubt, apps zu entscheiden. Stattdessen gibt es eine Globale Benutzer-konfigurierbare Einstellung, die bestimmt, welche Ordner, die Sie erhalten.
InformationsquelleAutor der Antwort marczellm
Können Sie diese
oder so:
Ich bevorzuge die erste option
Hinsichtlich
InformationsquelleAutor der Antwort esmoreno