Chargement d’un fichier de propriétés à partir d’un package Java

Je dois lire un fichier de propriétés qui est enterré dans la structure de mon package dans com.al.common.email.templates .

J’ai tout essayé et je ne peux pas le comprendre.

Au final, mon code sera exécuté dans un conteneur de servlets, mais je ne veux pas dépendre du conteneur pour quoi que ce soit. J’écris des cas de test JUnit et cela doit fonctionner dans les deux.

Lors du chargement des propriétés d’une classe dans le package com.al.common.email.templates vous pouvez utiliser

 Properties prop = new Properties(); InputStream in = getClass().getResourceAsStream("foo.properties"); prop.load(in); in.close(); 

(Ajouter toute la gestion des exceptions nécessaires).

Si votre classe n’est pas dans ce package, vous devez acquérir le InputStream légèrement différemment:

 InputStream in = getClass().getResourceAsStream("/com/al/common/email/templates/foo.properties"); 

Les chemins relatifs (ceux sans ‘/’) dans getResource() / getResourceAsStream() signifient que la ressource sera recherchée par rapport au répertoire qui représente le paquet dans lequel se trouve la classe.

Utiliser java.lang.Ssortingng.class.getResource("foo.txt") rechercherait le fichier (inexistant) /java/lang/Ssortingng/foo.txt sur le classpath.

L’utilisation d’un chemin absolu (commençant par ‘/’) signifie que le package en cours est ignoré.

Pour append à la réponse de Joachim Sauer, si vous devez le faire dans un contexte statique, vous pouvez faire quelque chose comme ceci:

 static { Properties prop = new Properties(); InputStream in = CurrentClassName.class.getResourceAsStream("foo.properties"); prop.load(in); in.close() } 

(La gestion des exceptions s’est déroulée comme avant.)

Les deux cas suivants concernent le chargement d’un fichier de propriétés à partir d’un exemple de classe nommé TestLoadProperties .

Cas 1: Chargement du fichier de propriétés à l’aide de ClassLoader

 InputStream inputStream = TestLoadProperties.class.getClassLoader() .getResourceAsStream("A.config"); properties.load(inputStream); 

Dans ce cas, le fichier de propriétés doit se trouver dans le répertoire root/src pour un chargement réussi.

Cas 2: Chargement du fichier de propriétés sans utiliser ClassLoader

 InputStream inputStream = getClass().getResourceAsStream("A.config"); properties.load(inputStream); 

Dans ce cas, le fichier de propriétés doit se trouver dans le même répertoire que le fichier TestLoadProperties.class pour un chargement réussi.

Remarque: TestLoadProperties.java et TestLoadProperties.class sont deux fichiers différents. L’ancien fichier .java se trouve généralement dans le répertoire src/ un projet, tandis que le dernier fichier .class se trouve généralement dans son répertoire bin/ .

 public class Test{ static { loadProperties(); } static Properties prop; private static void loadProperties() { prop = new Properties(); InputStream in = Test.class .getResourceAsStream("test.properties"); try { prop.load(in); in.close(); } catch (IOException e) { e.printStackTrace(); } } 
 public class ReadPropertyDemo { public static void main(Ssortingng[] args) { Properties properties = new Properties(); try { properties.load(new FileInputStream( "com/technicalkeeda/demo/application.properties")); System.out.println("Domain :- " + properties.getProperty("domain")); System.out.println("Website Age :- " + properties.getProperty("website_age")); System.out.println("Founder :- " + properties.getProperty("founder")); // Display all the values in the form of key value for (Ssortingng key : properties.ssortingngPropertyNames()) { Ssortingng value = properties.getProperty(key); System.out.println("Key:- " + key + "Value:- " + value); } } catch (IOException e) { System.out.println("Exception Occurred" + e.getMessage()); } } } 

En supposant que vous utilisez la classe Properties , via sa méthode load , et que vous utilisez le ClassLoader getResourceAsStream pour obtenir le stream d’entrée.

Comment passez-vous le nom, il semble que ce soit sous cette forme: /com/al/common/email/templates/foo.properties

J’ai réussi à résoudre ce problème avec cet appel

 Properties props = PropertiesUtil.loadProperties("whatever.properties"); 

De plus, vous devez placer votre fichier Whatever.properties dans / src / main / resources

Personne ne mentionne la solution similaire mais plus simple que ci-dessus sans avoir à traiter le package de la classe. En supposant que myfile.properties se trouve dans le classpath.

  Properties properties = new Properties(); InputStream in = ClassLoader.getSystemResourceAsStream("myfile.properties"); properties.load(in); in.close(); 

Prendre plaisir

utilisez le code ci-dessous s’il vous plaît:

     Propriétés p = new Properties (); 
     SsortingngBuffer path = new SsortingngBuffer ("com / al / common / email / templates /");
     path.append ("foo.properties");
     InputStream fs = getClass (). GetClassLoader ()
                                     .getResourceAsStream (path.toSsortingng ()); 

if(fs == null){ System.err.println("Unable to load the properties file"); } else{ try{ p.load(fs); } catch (IOException e) { e.printStackTrace(); } }