Comment créer un.Fichier INI pour stocker certains paramètres dans Java?

je veux créer un fichier ini pour stocker certains paramètres pour mon application. Est-ce une bonne idée de trouver où se trouve le fichier jar et d'y créer un fichier ini? Si oui, alors 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 certaines.

EDIT : j'utilise mac et je veux exécuter la même application sous windows. Je pourrais écrire quelque chose dans le Système.getProperty ("utilisateur.home") répertoire, mais je veux garder le système propre, si l'utilisateur décide de supprimer l'application. Il n'y a pas de meilleure façon de stocker le fichier de paramètres, par exemple dans le même répertoire que l'application?

21
demandé sur Lipis 2008-10-11 04:35:03

6 réponses

vous pouvez localiser votre répertoire d'application en utilisant ClassLoader. Voir: Java: trouver le répertoire d'application . Plutôt qu'un .INI Fichier, utiliser un .propriétés fichier - vous pouvez le charger et le sauvegarder via la classe propriétés .

comme d'autres l'ont fait remarquer, vous ne devez pas écrire les paramètres utilisateurs dans le répertoire de votre application. Que faire si l'utilisateur n'a pas accès en écriture à le répertoire des applications? Que faire si votre application est utilisée par plusieurs utilisateurs sur le même système en même temps? Aucune de ces situations n'est inhabituelle, même sur les fenêtres.

vous pouvez toujours vouloir charger certains paramètres à partir du répertoire d'application - peut-être que l'administrateur y a configuré des paramètres par défaut.

une convention commune est de sauvegarder les paramètres de l'utilisateur dans le répertoire de l'utilisateur:

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

Bien que cela signifie que vous pourriez laisser des fichiers errants derrière, cela peut être bénéfique si l'utilisateur re-installe l'application. Documentez ces choses dans un 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 de type unix, en commençant le nom du répertoire par un point (".myappdir") va rendre le répertoire caché. Sur Windows, il sera situé sous Mes Documents , de sorte que les utilisateurs ne verront pas le répertoire à moins qu'ils vont à la recherche pour elle.

22
répondu McDowell 2008-10-11 11:35:11

si les paramètres ne sont écrits que par votre application (plutôt que modifiés manuellement), envisagez d'utiliser l'API Préférences .

8
répondu Dan Dyer 2015-11-07 05:36:43

vous ne devriez pas stocker des fichiers temp dans le répertoire install d'une application. Rappelez-vous, l'utilisateur qui exécute l'application peut ne pas avoir accès en écriture à ce répertoire. L'endroit le plus sûr pour mettre des choses comme ça est dans C:\Documents et paramètres\username\Application Data\ApplicationName dossier (en ajustant le nom si nécessaire).

cela dit, cependant, je voudrais probablement stocker ce type de choses dans le registre au lieu d'un fichier sur leur ordinateur. (Mais, c'est juste moi.)

1
répondu BoltBait 2008-10-11 00:39:28

typiquement les programmeurs Java ne l'utilisent pas .les fichiers ini, mais .fichiers de propriétés (format différent). Vous pouvez utiliser le java.lang.Classe de propriétés comme une belle enveloppe programmatique si vous le faites.

pendant que vous pouvez obtenir l'emplacement de votre fichier jar en appelant getProtectionDomain().getCodeSource ().getLocation () sur votre classe .membre de la classe, je ne pas recommande que vous faites ceci.

je préférerais Ecrivez le fichier dans le système.getProperty ("utilisateur.accueil") répertoire-le répertoire d'accueil des utilisateurs, ou si elle est vraiment temporaire, le système.getProperty ("java.io.tmpdir")

1
répondu Chris Boran 2008-10-11 00:46:47

cela dépend si votre ini doit être lisible/inscriptible 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 "user".

quant à la recherche du fichier jar, vous devez trouver le ClassLoader pour une classe connue pour être chargée à partir de la jarre, Vérifiez qu'il s'agit du type de ClassLoader approprié (c'est-à-dire qu'il est vraiment a été chargé à partir d'une jarre), et vous pouvez extraire le chemin à partir de là. Je peux probablement creuser le code pour faire cela si c'est vraiment ce que vous voulez. Je ne recommande pas nécessairement.

MODIFIER de L'utilisateur.la propriété de la maison vous donnera le répertoire d'utilisateur, que vous pouvez utiliser en toute sécurité.

1
répondu Draemon 2008-10-14 03:55:07

l'idée avec La .le fichier properties au lieu du fichier INI est bon. De plus, si vous y stockez des données sensibles, vous pouvez envisager de les chiffrer. Regardez ça:

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é en java

1
répondu Radu Murzea 2017-05-23 10:29:24