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"));
où props
est un objet Properties
.
Quelqu'un peut-il me donner des conseils sur la façon de résoudre ce problème?
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 ...
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"));
Si c'est une application simple, alors getSystemResourceAsStream peut également être utilisé.
try (InputStream inputStream = ClassLoader.getSystemResourceAsStream("config.properties"))..
Faites un clic droit sur le dossier Resources
et sélectionnez Build Path > Add to Build Path
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);
}
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.
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();
}