web-dev-qa-db-fra.com

Comment obtenir le dossier de données de l'application locale en Java?

Dupliquer possible:
Quel est le moyen multiplateforme d'obtenir le chemin d'accès au répertoire de données d'application local?

Je cherche un moyen d'obtenir l'emplacement du dossier de données de l'application locale, qui est un dossier Windows spécial, en Java . Malheureusement, les éléments suivants ne fonctionnent que pour les versions anglaises de Windows XP avec les paramètres par défaut :

System.getProperty("user.home") + "\\Local Settings\\Application Data"

Ce que j'aimerais avoir, c'est quelque chose comme ça dans .NET:

System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

Existe-t-il un moyen de le faire sans avoir à appeler SHGetSpecialFolderLocation de l'API Windows Shell?

46
smf68

La lecture de la clé de registre "Shell Folders" est obsolète à partir de Windows 95. La clé de registre contient une note disant "! N'utilisez pas cette clé de registre. Utilisez plutôt SHGetFolderPath ou SHGetKnownFolderPath". Je devais trouver cela à la dure sur un système Vista où toutes les clés étaient manquantes, à l'exception du message d'avertissement.

Cette réponse liée à stackoverflow résout ce problème sous Windows en utilisant JNA, qui est la solution que j'utilise actuellement.

11
Frederik
System.getenv("APPDATA")

(Il semble n'y avoir aucune variable env pour le dossier "Local Settings", mais cela vous donnera le dossier 'Application Data'

75
Ryan Fernandes

qu'en est-il de ce qui suit

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

J'ai une situation où ce n'est pas sous "user.home"

10
Charles Godwin

Je voudrais utiliser les deux manières suivantes:

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

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

Vous pouvez lire le chemin du registre: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\** est l’une de ces clés:

  • AppData local (C:\Documents and Settings\USER\Local Settings\Application Data)
  • Paramètres locaux (C:\Documents and Settings\USER\Local Settings)
  • AppData (C:\Documents and Settings\USER\Application Data)

Remarque: Ces exemples de chemins proviennent d'une installation anglaise XP de Windows.

1
Gregor

J'ai résolu de cette façon

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