hiiii ... Je souhaite obtenir le contenu du fichier de propriétés dans l'objet Classe InputStream à l'aide de GetSystemResourceeStream (). J'ai construit le code d'échantillon. Il fonctionne bien en utilisant la méthode principale (), mais lorsque je déploierai le projet et exécuté sur le serveur, le chemin du fichier de propriétés ne peut pas obtenu ... SO INPUTSTREAM Object Store Null Valeur.
échantillon code est là .. p> < Pré> xxx pré> p>
3 Réponses :
Essayez d'utiliser getresourceastream () code> au lieu de
getSystemresourceastream () code>. p>
1) méfiez-vous de l'appelant class.getresourceastream (nom) code> directement sur la classe code> Classe Code> - il achète
nom code> avec le chemin de la classe à l'instance de classe que vous appelé ça sur. 2) appeler
this.getclass (). GetClassloader (). GetResourceastream (nom) code> et
classloader.getsystemresourceastream (nom) code> sont presque toujours équivalents. Ils commencent avec le chargeur de classes système, à la fois par
classloader.getresource (nom) code> où il délégués récursives via la plate-forme et les chargeurs de chargeur de démarrage pour la résolution, puis essayez le chargeur de classes système à la fin, où il est presque toujours trouvera votre ressource.
Je dis "presque toujours équivalent" dans le commentaire ci-dessus parce qu'il est fort probable que this.getclass (). GetClassloader () code> retournera une instance de
jdk.internal.loader.classloader $ AppClassLoader code> (chargeur de classes système)
Le Essayez d'utiliser le chargeur de classes code> Cette classe chargée à l'aide du chemin correct: P> SystemClassloader CODE> Charge des ressources de
java.class.Path code> Cartes de sorcière à la variable système
classpath code>. Dans votre application locale, vous avez probablement la ressource que vous essayez de charger configuré dans
java.class.path code> variable. Sur le serveur, c'est une autre histoire car probablement le serveur charge vos ressources à partir d'un autre chargeur de classe.
getClass().getResourceAsStream(fileName);
getclass (). GetResourceastream ("Input.Properties"); travaillé pour moi. La ressource est sur le même répertoire de la classe la utilise
je déploie le projet et exécuté sur le serveur, em> p>
Ceci ressemble à une application Web JSP / servlet. Dans ce cas, vous devez utiliser le chargeur
code> qui est obtenu comme suit: p>
xxx pré> celui-ci a accès au
tout Strong> Les chemins de classe de classe liés à la webapplication en question et que vous n'êtes plus dépendant du chargeur de classes parent (une webApp en a plus d'un!) a chargé votre classe. P> Puis, sur ce chargeur de classe, vous avez besoin de Il suffit d'appeler
GetResourceastream () CODE>
Pour obtenir une ressource de classe de classe en tant que flux, pas legetSystemresourceastream () code> qui dépend de la manière dont la liste web est démarrée. Vous ne voulez pas dépendre de cela aussi, car vous n'avez pas de contrôle sur celui-ci à l'hébergement externe: p>
xxx pré> Ceci est finalement plus robuste que votre initiale
getSystemresourceastream () code> approche et la classe
# getresourceastream () code> comme suggéré par d'autres. p> blockQuote>
Pourquoi utilisez-vous à l'aide du chargeur de classe système plutôt que la normale?
Remarque: AS de Java9 + le chargeur de système de système PKA Le chargeur de classes d'application est i> le «normal», c'est-à-dire le petit-enfant du chargeur de classe Bootstrap et de l'enfant du chargeur de classe de plate-forme, voir la réponse acceptée à Stackoverflow.com/questions/46494112/...