Enregistrement des paramètres utilisateur / de la base de données / du cache… en Java (sous chaque système d'exploitation)

StackOverflow https://stackoverflow.com/questions/333317

Question

Mon application Java enregistre des éléments dans 'user.home', mais sous Windows, cela ne semble pas être le bon chemin pour enregistrer les informations sur l'application (comme un ami me l'a dit). Une autre option utilise l’application de préférences api, mais il n’est pas possible de configurer l’emplacement hsqldb à l’aide de cette option. De plus, je souhaite que tous les fichiers soient disponibles dans le même dossier (base de données locale, configuration, cache, ...).

Je recherche un exemple de code ou un framework prenant en charge les éléments spécifiques à l'OS.

Était-ce utile?

La solution

Sur mon système WinXP Pro SP3, user.home pointe sur C: \ Documents and settings \ < nom d'utilisateur > . Beaucoup d'applications ne font que stocker leurs données là-bas (au lieu de ce chemin + données d'application, mais certaines autres vont jusque là), créant un répertoire dans le style Unix, c'est-à-dire. point + nom de l'application (exemples: .antexplorer, .sqlworkbench, .squirrel-sql, .SunDownloadManager, .p4qt, .gimp-2.4, etc.).

Cela ressemble à une pratique décente et courante ...

Autres conseils

Il est inhabituel qu'une application Windows enregistre des données dans user.home mais pas "mal". Les applications Windows adorent diffuser leurs données partout (un peu dans la base de registre, un peu dans le répertoire d'installation de l'application, un peu dans le répertoire Windows, un peu dans System32, un peu ici et un peu là). En fin de compte, il est impossible de sauvegarder ou de supprimer proprement un élément entraînant le fameux "Windows Rot". (c’est-à-dire que vous devez réinstaller tous les quelques mois).

Quoi qu'il en soit. Si vous ne voulez vraiment pas utiliser user.home (et je ne vois aucune raison de ne pas le faire), utilisez un code comme à partir de Apache commons-lang pour déterminer si vous utilisez Windows. Si cela donne la valeur true, ouvrez une boîte de dialogue de sélection de répertoire dans laquelle l'utilisateur peut spécifier l'emplacement où il souhaite enregistrer ses données.

Enregistrez ces informations dans les préférences et utilisez ce chemin lors du prochain démarrage de votre application. De cette façon, les utilisateurs peuvent spécifier où ils veulent leurs données et vous ne devez laisser qu'un bit d’information dans les préférences.

Pour une application " foo " Je créerais un répertoire nommé ".foo " à l'intérieur de user.home. Pour Windows, cela aura l'air un peu étrange, mais presque personne ne regardera jamais dans ce répertoire (et il est rempli de répertoires obscurs de toute façon) et sous Linux / Solaris / ... cela créera un répertoire caché qui n'encombrera pas le répertoire de base des utilisateurs. visuellement.

lit de manière dynamique (à partir de votre code) la valeur de la variable d'environnement APPDATA et stockez vos fichiers de configuration dans % APPDATA% \\. myapp \ config

== > la valeur dépend de la plate-forme, n'utilisez aucun chemin codé en dur, lisez toujours env. var.

Le problème ne vient pas de Windows mais de la configuration Java standard.

Longue discussion http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4787931>Here

Je vous conseillerais de le sélectionner dans une propriété '-D MYLOC =% USERPROFILE%' sur la ligne de commande.

Notez que vous n'obtiendrez qu'un "USERPROFILE". si l'utilisateur s'est connecté à un ordinateur de bureau, cela ne sera pas défini si l'utilisateur s'est connecté à distance avec citrix ou similaire ou via ssh.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top