Classe getResourceAsStream() ressource dans un package différent
J'ai quelque chose comme la structure de projet suivante
-project
-src/main/java //source folder
-com.mypackage
-Utility.java
-some.properties
-src/main/resources //source folder
-configuration_files
-configuration_report.txt
Je suis de la génération de la jar
avec Eclipse du Export
fonction. Le ci-dessus se traduit par une jar
avec la structure:
-myjar.jar
-com
-mypackage
-Utility.class
-some.properties
-configuration_files
-configuration_report.txt
Dans le Utility
classe, je vais essayer d'obtenir les InputStream
de configuration_report.txt
.
Je faisais cela (il est dans un static
méthode):
Utility.class.getResourceAsStream("/configuration_files/configuration_report.txt");
qui semble être confirmé par la réponse à cette question, puisque le fichier n'est pas dans le même package que la classe en faisant la demande.
Quand je le lance, toutefois, elle renvoie null
. Pourquoi?
Noter que pour la some.properties
fichier, j'ai pu faire les deux
Utility.class.getResourceAsStream("/com/package/some.properties");
Utility.class.getResourceAsStream("some.properties");
et je voudrais obtenir le flux.
Je suis en train d'exécuter cette ligne de commande si cela fait une différence.
java [-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044] -cp myjar.jar MyMain
Si j'essaie de le lancer au sein d'Eclipse, il fonctionne...
Edit:
Ce code est pertinent. Avec ou sans le précédent /
, il retourne la valeur null
String sourceFilePath = "/configuration_files" + File.separator + "configuration_report.txt";
InputStream in = Utility.class.getResourceAsStream(sourceFilePath);
OriginalL'auteur Sotirios Delimanolis | 2013-05-01
Vous devez vous connecter pour publier un commentaire.
Après plusieurs essais, la solution revient à ce petit javadoc entrée pour
chargeur de classe#getResource(String)
:L'extrait de code que j'avais posté avons travaillé
mais je n'étais pas à l'aide de
/
, j'ai été en utilisantFile.separator
comme dans mon edit:de la pensée, le chargeur de classe a travaillé comme spécifique au système d'exploitation opérations sur les Fichiers. La première
/
a été trouvée, mais laFile.separator
évalué à\\
depuis que je suis sur Windows.La javadoc de
Class#getResource(String)
dit plus de la même chose.Pourquoi cela a fonctionné sur Eclipse, mais pas à partir de la ligne de commande, je ne sais toujours pas, mais regardez @andy commentaire ci-dessous.
Ce l'article donne, c'est une bonne explication de cette situation.
OriginalL'auteur Sotirios Delimanolis