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’access, 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); Ssortingng pos_id = pro.getProperty("pos_id"); if(pos_id.equals("")){ pos_id="0" ; } global_variables.station_id = Integer.parseInt(pos_id); Ssortingng 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); } 

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 FileInputStream(..) utilise des chemins relatifs au répertoire de l’utilisateur actuel (voir la documentation java.io.File ). Donc, il cherche foo.properties dans /home/usr/ ou c:\documents and settings\usr . Étant donné que votre fichier .properties se trouve sur le Class.getResourceAsStream(..) access aux Class.getResourceAsStream(..) vous pouvez le lire tel quel – via la Class.getResourceAsStream(..) .

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 () . Toutefois, l’utilisation de getClass().getResourceAsStream("pos_config.properties") est dangereuse car vous utilisez un chemin d’access résolu par rapport à la classe donnée et une sous-classe peut modifier l’emplacement par rapport auquel il est résolu. 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") 

Essayez-vous d’obtenir le fichier de propriétés à partir du répertoire de travail actuel 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")); Ssortingng pos_id = pro.getProperty("pos_id"); try { global_variables.station_id = Integer.parseInt(pos_id); } catch(Exception e) { global_variables.station_id = 0; } Ssortingng 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); } 

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à-bas. 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"))); 

Dans une méthode statique que j’utilise

ClassLoader.getSystemResourceAsStream (“name.properties”);

Cela ne comstackra pas:

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

Bon usage:

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