Question

Je souhaite créer un fichier ini pour stocker certains paramètres de mon application. Est-ce une bonne idée de localiser le fichier jar et de créer un fichier ini? Si oui, comment puis-je trouver l'emplacement du fichier jar?

Mais si vous connaissez une meilleure solution pour quelque chose comme ça, j'aimerais en entendre quelques-unes.

MODIFIER : j'utilise mac et je souhaite exécuter la même application sous Windows. Je pourrais écrire quelque chose dans le répertoire System.getProperty ("user.home"), mais je souhaite que le système reste propre si l'utilisateur décide de supprimer l'application. Il n’existe pas de meilleur moyen de stocker le fichier de paramètres, par exemple dans le même répertoire que l’application?

Était-ce utile?

La solution

Vous pouvez localiser votre répertoire d'application à l'aide de ClassLoader. Voir: Java: recherche du répertoire de l'application . Au lieu d’un fichier .INI , utilisez un fichier .properties . Vous pouvez le charger et l’enregistrer via le Classe de la propriété.

Comme d'autres l'ont noté, vous ne devriez pas écrire les paramètres utilisateur dans votre répertoire d'application. Que se passe-t-il si l'utilisateur n'a pas d'accès en écriture au répertoire de l'application? Que se passe-t-il si votre application est utilisée simultanément par plusieurs utilisateurs du même système? Aucune de ces situations n’est inhabituelle, même sous Windows.

Vous pouvez toujours souhaiter charger certains paramètres à partir du répertoire de l'application. Peut-être que l'administrateur y a configuré les paramètres par défaut.

Une convention courante consiste à enregistrer les paramètres utilisateur dans le répertoire de base de l'utilisateur:

/home/user/.eclipse
C:\Documents and Settings\User\.eclipse

Même si cela signifie que vous pouvez laisser des fichiers égarés, cela peut être utile si l'utilisateur réinstalle l'application. Documentez ces choses dans un fichier README. Voici comment créer et obtenir une référence au répertoire:

public static File getSettingsDirectory() {
    String userHome = System.getProperty("user.home");
    if(userHome == null) {
        throw new IllegalStateException("user.home==null");
    }
    File home = new File(userHome);
    File settingsDirectory = new File(home, ".myappdir");
    if(!settingsDirectory.exists()) {
        if(!settingsDirectory.mkdir()) {
            throw new IllegalStateException(settingsDirectory.toString());
        }
    }
    return settingsDirectory;
}

Sur les systèmes d'exploitation de type Unix, le fait de commencer le nom du répertoire par un point (".myappdir") rendra le répertoire masqué. Sous Windows, il se trouvera sous Mes documents . Par conséquent, les utilisateurs ne verront pas le répertoire à moins de le rechercher.

Autres conseils

Si les paramètres sont uniquement écrits par votre application (plutôt que modifiés manuellement), envisagez d'utiliser API de préférences .

Vous ne devriez pas stocker de fichiers temporaires dans le répertoire d'installation d'une application. N'oubliez pas que l'utilisateur exécutant l'application peut ne pas avoir d'accès en écriture à ce répertoire. L’endroit le plus sûr pour placer ce genre de choses est dans le dossier C: \ Documents and Settings \ nom_utilisateur \ Application Data \ ApplicationName (en modifiant le nom si nécessaire).

Cela dit, je stockerais probablement ce type de contenu dans le registre plutôt que dans un fichier sur leur ordinateur. (Mais c'est juste moi.)

Généralement, les programmeurs Java n'utilisent pas les fichiers .ini, mais les fichiers .properties (format différent). Si vous le faites, vous pouvez utiliser la classe java.lang.Properties comme un wrapper de programmation agréable.

Bien que vous puissiez obtenir l'emplacement de votre fichier jar en appelant getProtectionDomain (). getCodeSource (). getLocation () sur le membre .class de votre classe, je ne le fais pas recommande que vous faites cela.

J'écrirais plutôt le fichier dans le répertoire System.getProperty ("user.home") - le répertoire personnel de l'utilisateur, ou s'il est vraiment temporaire, System.getProperty (& java.io.tmpdir ").

Cela dépend si votre ini doit être lisible / écrit en écriture dans des circonstances normales. Sinon, vous pouvez utiliser un fichier de propriétés plutôt qu'un fichier ini et le stocker dans le répertoire "utilisateur". répertoire.

En ce qui concerne le fichier jar, vous devez rechercher le ClassLoader d’une classe chargée d’être chargée à partir du fichier jar, vérifier que c’est le type de ClassLoader approprié (c’est-à-dire qu'il est vraiment jar), et vous pouvez en extraire le chemin. Je peux probablement trouver le code pour le faire si c'est vraiment ce que vous voulez. Je ne le recommanderais pas nécessairement.

MODIFIER La propriété user.home vous donnera le répertoire utilisateur que vous pouvez utiliser en toute sécurité.

L’idée avec le fichier .properties au lieu du fichier INI est bonne. En outre, si vous stockez des données sensibles, vous pouvez envisager de les chiffrer. Découvrez ceci:

https://www.owasp.org/index.php/How_to_encrypt_a_properties_file

ou ceci:

chiffrer et déchiffrer la valeur du fichier de propriétés en java

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