web-dev-qa-db-fra.com

Impossible de charger le fichier de propriétés à partir du répertoire des ressources

J'ai importé un projet depuis un référentiel Git et y ai ajouté la nature Maven dans Eclipse. Dans le dossier des ressources, j'ai ajouté un fichier de configuration appelé myconf.properties. Maintenant, chaque fois que j'essaie d'ouvrir ce fichier à partir de mon code Java, je reçois FileNotFoundException. Le fichier est également présent dans le dossier target/classes généré après la compilation du projet par maven.

Quelqu'un peut-il me dire quel peut être le problème? Mon code Java qui tente de charger ce fichier est le suivant:

props.load(new FileInputStream("myconf.properties"));

props est un objet Properties.

Quelqu'un peut-il me donner des conseils sur la façon de résoudre ce problème?

46
artaxerxe

Si le fichier est placé sous target/classes après la compilation, il se trouve déjà dans un répertoire qui fait partie du chemin de génération. Le répertoire src/main/resources est le répertoire par défaut Maven pour ces ressources et il est automatiquement placé dans le chemin de construction par le plug-in Eclipse Maven (M2E). Il n’est donc pas nécessaire de déplacer votre fichier de propriétés.

L'autre sujet est, comment récupérer de telles ressources. Les ressources dans le chemin de construction sont automatiquement dans le chemin de classe du programme Java en cours d'exécution. Compte tenu de cela, vous devez toujours charger ces ressources avec un chargeur de classe. Exemple de code:

String resourceName = "myconf.properties"; // could also be a constant
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties props = new Properties();
try(InputStream resourceStream = loader.getResourceAsStream(resourceName)) {
    props.load(resourceStream);
}
// use props here ...
108
Seelenvirtuose

Je pense que vous devez le placer sous src/main/resources et le charger comme suit: 

props.load(new FileInputStream("src/main/resources/myconf.properties"));

La façon dont vous essayez de le charger va d’abord vérifier le dossier de base de votre projet. S'il est dans target/classes et que vous voulez le charger à partir de là, procédez comme suit:

props.load(new FileInputStream("target/classes/myconf.properties"));
16
VD'

Si c'est une application simple, alors getSystemResourceAsStream peut également être utilisé.

try (InputStream inputStream = ClassLoader.getSystemResourceAsStream("config.properties"))..
5
rns

Faites un clic droit sur le dossier Resources et sélectionnez Build Path > Add to Build Path

3
Kevin Bowersox

J'utilise quelque chose comme ceci pour charger le fichier de propriétés.

        final ResourceBundle bundle = ResourceBundle
                .getBundle("properties/errormessages");

        for (final Enumeration<String> keys = bundle.getKeys(); keys
                .hasMoreElements();) {
            final String key = keys.nextElement();
            final String value = bundle.getString(key);
            prop.put(key, value);
        }
1
Karthik Prasad

Je crois que sous Eclipse, si vous utilisez "myconf.properties" comme chemin relatif, votre structure de fichier devrait ressembler à ceci

ProjectRoot
         src
         bin
         myconf.properties

Eclipse recherchera le fichier dans le répertoire racine du projet si aucun autre répertoire n'est spécifié dans le chemin du fichier.

0
Paul Samsotha

Utilisation de ClassLoader.getSystemClassLoader()

Exemple de code:

Properties prop = new Properties();
InputStream input = null;
try {
    input = ClassLoader.getSystemClassLoader().getResourceAsStream("conf.properties");
    prop.load(input);

} catch (IOException io) {
    io.printStackTrace();
}
0
Deep Nirmal