web-dev-qa-db-fra.com

Chemin du fichier de propriétés en java

J'ai un fichier de propriétés qui se trouve dans un package par défaut et la classe dans laquelle j'utilise le fichier de propriétés se trouve également dans le même package par défaut. Si je n'utilise que le nom du fichier sans chemin d'accès, j'obtiens une erreur. Évidemment, ce n’est pas correct car je devrais donner une sorte de chemin pour faire référence au fichier tat. Je construirai l’application pour en faire un fichier jar, alors comment devrais-je donner le chemin car le fichier de propriétés doit aller à l’intérieur de ce fichier jar. J'utilise l'EDI Netbeans.

MODIFIER

 Properties pro = new Properties();

    try {            
        pro.load(new FileInputStream("pos_config.properties"));
        pro.setProperty("pos_id", "2");
        pro.setProperty("shop_type", "2");
        pro.store(new FileOutputStream("pos_config.properties"), null);
        String pos_id = pro.getProperty("pos_id");
        if(pos_id.equals("")){
           pos_id="0" ;
        }
        global_variables.station_id = Integer.parseInt(pos_id);
        String shop_type = pro.getProperty("shop_type");
        if(shop_type.equals("")){
           shop_type="0" ;
        }
        global_variables.shop_type = Integer.parseInt(shop_type);
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
8
Deepak

Utilisez getClass().getResourceAsStream("foo.properties")

Mais notez que l'utilisation du paquet par défaut est déconseillée (ce qui précède fonctionnera avec n'importe quel paquet).

Votre code ne fonctionne pas car la FileInputStream(..) utilise des chemins relatifs au répertoire de l'utilisateur actuel (voir la documentation de Java.io.File). Donc, il cherche foo.properties dans /home/usr/ ou c:\documents and settings\usr. Puisque votre fichier .properties se trouve sur le chemin de classe, vous pouvez le lire tel quel - via la méthode Class.getResourceAsStream(..).

9
Bozho

Comme d'autres l'ont indiqué, vous devez le charger à partir du classpath plutôt que sous forme de fichier si vous souhaitez pouvoir le charger à partir d'un fichier jar. Vous voulez la méthode Class.getResourceAsStream () ou la méthode ClassLoader.getResourceAsStream () . Cependant, utiliser getClass().getResourceAsStream("pos_config.properties") est dangereux car vous utilisez un chemin qui est résolu par rapport à la classe donnée et une sous-classe peut modifier l'emplacement par rapport auquel elle est résolue. Par conséquent, il est plus sûr de nommer un chemin absolu dans le fichier jar:

getClass().getResourceAsStream("/pos_config.properties")

ou mieux encore, utilisez un littéral de classe au lieu de getClass ():

Foo.class.getResourceAsStream("pos_config.properties")
6
Ryan Stewart

Essayez-vous d’obtenir le fichier de propriétés à partir du répertoire de travail en cours ou essayez-vous de l’obtenir en tant que ressource? Il semble que vous devriez utiliser.

InputStream is = getClass().getResourceAsStream(filename);
properties.load(is);

charger un fichier depuis le répertoire courant

properties.load(new FileInputStream(filename));

À mon avis, c’est ce que vous voulez vraiment.

try {            
    Properties pro = new Properties();
    pro.load(new FileInputStream("pos_config.properties"));
    String pos_id = pro.getProperty("pos_id");
    try {
        global_variables.station_id = Integer.parseInt(pos_id);
    } catch(Exception e) {
        global_variables.station_id = 0;
    }
    String shop_type = pro.getProperty("shop_type");
    try {
        global_variables.shop_type = Integer.parseInt(shop_type);
    } catch(Exception e) {
        global_variables.shop_type = 0;
    }
} catch (IOException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
5
Peter Lawrey

Je recommanderais quand même de mettre tous les fichiers de propriétés dans un dossier de ressources. 

Dans Eclipse, vous pouvez créer un dossier source avec:

Clic droit -> nouveau -> dossier source

Je parie qu'il y a quelque chose de similaire dans Netbeans. Mettez tout votre fichier de propriété là-dedans. Plus tard, vous pouvez y accéder avec le code suivant:

AnyClass.class.getResource("/image.png")

Donc, pour votre problème spécifique, vous y accéderiez comme ceci:

pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties")));
3
Prine

Dans une méthode statique que j'utilise 

ClassLoader.getSystemResourceAsStream ("name.properties");

2
Nikolay Frick

Cela ne compilera pas:

pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties")));

Bon usage:

pro.load(YourClass.class.getResourceAsStream("/pos_config.properties")));
0
tulu