it-swarm.com.de

Wie bekomme ich einen lokalen Anwendungsdatenordner in Java?

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?

46
smf68

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.

11
Frederik
System.getenv("APPDATA")

(Es scheint keine env-Variable für den Ordner "Local Settings" zu geben, dies gibt Ihnen jedoch den Ordner "Application Data".)

75
Ryan Fernandes

was ist mit dem folgenden

String dataFolder = System.getenv("LOCALAPPDATA");

Ich habe eine Situation, in der dies NICHT unter "user.home" geschieht.

10
Charles Godwin

Ich möchte die folgenden zwei Möglichkeiten verwenden:

String dataFolder = System.getenv("APPDATA");

String dataFolder = System.getProperty("user.home") + "\\Local Settings\\ApplicationData";
3
jianinz

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:

  • Lokale AppData (C:\Documents and Settings\USER\Local Settings\Application Data)
  • Lokale Einstellungen (C:\Documents and Settings\USER\Local Settings)
  • AppData (C:\Documents and Settings\USER\Application Data)

Hinweis: Diese Beispielpfade stammen aus einer englischen Windows-Installation XP

1
Gregor

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;
}
0