J'ai le code suivant essayant de lire un fichier de propriétés:
Properties prop = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("myProp.properties");
prop.load(stream);
J'obtiens une exception à la dernière ligne. Plus précisément:
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:46)
at Assignment1.BaseStation.main(BaseStation.java:87)
merci Nikos
java
properties
Nikos
la source
la source
getResourceAsStream
recherche le fichier sur le chemin de classe. Si votre fichier de propriétés se trouve dans le répertoire du package demyPackage
, utilisez-le/myPackage/myProp.properties
comme chemin.conf
package pour stocker tous mes fichiers de configuration et que ma hiérarchie de fichiers est :,myproject ->src, conf, test
comment vais-je charger les propriétés en ajoutant une barre oblique précédente?Vous pouvez trouver des informations sur cette page:
http://www.mkyong.com/java/java-properties-file-examples/
la source
Reader
entréeprop.load(reader)
, selon la documentation:The specified stream remains open after this method returns
Vous pouvez utiliser la
ResourceBundle
classe pour lire le fichier de propriétés.la source
conf/filename.properties
base sur le répertoire racine du projetla source
Vous ne pouvez pas utiliser ce mot - clé comme -
dans un contexte statique.
La meilleure chose à faire serait de saisir le contexte de l'application comme -
alors vous pouvez charger le fichier de ressources à partir du chemin de classe -
Cela fonctionnera à la fois pour le contexte statique et non statique et la meilleure partie est que ce fichier de propriétés peut être dans n'importe quel package / dossier inclus dans le chemin de classe de l'application.
la source
Votre fichier doit être disponible comme
com/example/foo/myProps.properties
dans classpath. Puis chargez-le comme:la source
si votre config.properties n'est pas dans le répertoire src / main / resource et qu'il est dans le répertoire racine du projet, vous devez faire quelque chose comme ci-dessous: -
la source
Assurez-vous que le nom du fichier est correct et que le fichier se trouve réellement dans le chemin de classe.
getResourceAsStream()
retournera null si ce n'est pas le cas qui provoque la levée de l'exception par la dernière ligne.Si myProp.properties se trouve dans le répertoire racine de votre projet, utilisez à la
/myProp.properties
place.la source
Vous pouvez utiliser java.io.InputStream pour lire le fichier comme indiqué ci-dessous:
la source
Compte tenu du contexte
loader.getResourceAsStream("myPackage/myProp.properties")
doit être utilisé.Le leadership
'/'
ne fonctionne pas avec laClassLoader.getResourceAsStream(String)
méthode.Vous pouvez également utiliser la
Class.getResourceAsStream(String)
méthode, qui permet'/'
de déterminer si le chemin est absolu ou relatif à l'emplacement de la classe.Exemples:
la source
Si le chemin de votre fichier de propriétés et le chemin de votre classe java sont identiques, vous devriez le faire.
Par exemple:
la source
Aucune des réponses actuelles ne montre la
InputStream
fermeture (cela entraînera une fuite d'un descripteur de fichier), et / ou ne traite pas du.getResourceAsStream()
retour de null lorsque la ressource n'est pas trouvée (cela conduira à unNullPointerException
message déroutant,"inStream parameter is null"
). Vous avez besoin de quelque chose comme ce qui suit:la source
Pour lire le fichier de propriétés avec son ordre d'origine:
la source
De nombreuses réponses ici décrivent des méthodes dangereuses où elles instancient un flux d'entrée de fichier mais n'obtiennent pas de référence au flux d'entrée afin de fermer le flux plus tard. Cela entraîne des flux d'entrée suspendus et des fuites de mémoire. La manière correcte de charger les propriétés doit être similaire à la suivante:
Notez l'instanciation du flux d'entrée du fichier en
try-with-resources
bloc. Puisqu'uneFileInputStream
est autoclosable, elle sera automatiquement fermée après latry-with-resources
sortie du bloc. Si vous souhaitez utiliser untry
bloc simple , vous devez le fermer explicitement en utilisantfis.close();
dans lefinally
bloc.la source
Je vois que la question est ancienne. Si quelqu'un tombe sur cela à l'avenir, je pense que c'est une façon simple de le faire. Conservez le fichier de propriétés dans votre dossier de projet.
la source
Spécifiez le chemin à partir de src comme ci-dessous:
la source