Mögliches Duplizieren:
Wie kann der Pfad zum lokalen Anwendungsdatenverzeichnis plattformübergreifend abgerufen werden?
Ich suche nach einer Möglichkeit, den Speicherort des lokalen Anwendungsdatenordners, der ein spezieller Windows-Ordner ist, in Java abzurufen. __ Leider funktioniert das Folgende nur für englische Versionen von Windows XP mit Standardeinstellungen :
System.getProperty("user.home") + "\\Local Settings\\Application Data"
Was ich gerne hätte, ist so etwas in .NET:
System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Gibt es eine Möglichkeit, dies ohne Aufruf von SHGetSpecialFolderLocation der Windows Shell-API zu tun?
Das Lesen des Registrierungsschlüssels "Shell Folders" ist ab Windows 95 veraltet. Der Registrierungsschlüssel enthält die folgende Notiz: "Verwenden Sie diesen Registrierungsschlüssel nicht. Verwenden Sie stattdessen SHGetFolderPath oder SHGetKnownFolderPath." Ich musste dies auf einem Vista-System auf die harte Tour herausfinden, wo alle Schlüssel außer dem Warnhinweis fehlten.
Diese verwandte Stackoverflow-Antwort löst dieses Problem unter Windows mit JNA, der Lösung, die ich derzeit verwende.
System.getenv("APPDATA")
(Es scheint keine env-Variable für den Ordner "Local Settings" zu geben, dies gibt Ihnen jedoch den Ordner "Application Data".)
was ist mit dem folgenden
String dataFolder = System.getenv("LOCALAPPDATA");
Ich habe eine Situation, in der dies NICHT unter "user.home" geschieht.
Ich möchte die folgenden zwei Möglichkeiten verwenden:
String dataFolder = System.getenv("APPDATA");
String dataFolder = System.getProperty("user.home") + "\\Local Settings\\ApplicationData";
Sie können den Pfad aus der Registrierung lesen: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\*
, wobei *
einer dieser Schlüssel ist:
C:\Documents and Settings\USER\Local Settings\Application Data
)C:\Documents and Settings\USER\Local Settings
)C:\Documents and Settings\USER\Application Data
)Hinweis: Diese Beispielpfade stammen aus einer englischen Windows-Installation XP
Ich habe mich so gelöst
private static File getAppData(){
ProcessBuilder builder = new ProcessBuilder(new String[]{"cmd", "/C echo %APPDATA%"});
BufferedReader br = null;
try {
Process start = builder.start();
br = new BufferedReader(new InputStreamReader(start.getInputStream()));
String path = br.readLine();
// TODO HACK do not know why but I get an extra '"' at the end
if(path.endsWith("\"")){
path = path.substring(0, path.length()-1);
}
return new File(path.trim());
} catch (IOException ex) {
Logger.getLogger(Util.class.getName()).log(Level.SEVERE, "Cannot get Application Data Folder", ex);
} finally {
if(br != null){
try {
br.close();
} catch (IOException ex) {
Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
return null;
}