getSystemResourceAsStream() renvoie la valeur null
Hiii...
Je veux récupérer le contenu d'un fichier de propriétés dans la classe InputStream objet à l'aide de getSystemResourceAsStream(). J'ai construit l'exemple de code. Il fonctionne bien à l'aide de méthode main (), mais quand je le déploiement du projet et l'exécuter sur le serveur, les propriétés du fichier chemin d'accès ne peut pas obtenir ... donc inputstream magasin d'objets de valeur null.
Exemple de code est ici..
public class ReadPropertyFromFile {
public static Logger logger = Logger.getLogger(ReadPropertyFromFile.class);
public static String readProperty(String fileName, String propertyName) {
String value = null;
try {
//fileName = "api.properties";
//propertyName = "api_loginid";
System.out.println("11111111...In the read proprty file.....");
// ClassLoader loader = ClassLoader.getSystemClassLoader();
InputStream inStream = ClassLoader.getSystemResourceAsStream(fileName);
System.out.println("In the read proprty file.....");
System.out.println("File Name :" + fileName);
System.out.println("instream = "+inStream);
Properties prop = new Properties();
try {
prop.load(inStream);
value = prop.getProperty(propertyName);
} catch (Exception e) {
logger.warn("Error occured while reading property " + propertyName + " = ", e);
return null;
}
} catch (Exception e) {
System.out.println("Exception = " + e);
}
return value;
}
public static void main(String args[]) {
System.out.println("prop value = " + ReadPropertyFromFile.readProperty("api.properties", "api_loginid"));
}
}
Pourquoi sont-le en utilisant le système de chargeur de classe, plutôt que la normale?
OriginalL'auteur Hitesh Solanki | 2010-03-26
Vous devez vous connecter pour publier un commentaire.
Cela sonne comme une JSP/Servlet webapplication. Dans ce cas, vous devez utiliser le
ClassLoader
qui est obtenu comme suit:Celui-ci a accès à la tous classpath chemins liée à la webapplication en question et vous n'êtes pas plus en fonction de chargeur de classe parent (une webapp a plus d'un!) chargement de votre classe.
Alors, sur ce chargeur de classe, vous devez simplement appeler
getResourceAsStream()
pour obtenir un chemin de classe de ressource en tant que flux, pas lagetSystemResourceAsStream()
qui dépend de la webapplication est commencé. Vous ne voulez pas être dépendante de qui que bien puisque vous n'avez aucun contrôle sur elle à l'hébergement en externe:C'est finalement plus robuste que votre initiale
getSystemResourceAsStream()
approche et laClass#getResourceAsStream()
comme suggéré par d'autres.OriginalL'auteur BalusC
La
SystemClassLoader
charge les ressources dejava.class.path
sorcière cartes à la variable systèmeCLASSPATH
. Dans votre application, vous avez probablement la ressource que vous essayez de charger configuré dansjava.class.path
variable. Dans le serveur, c'est une autre histoire parce que probablement, le serveur charge vos ressources à partir d'un autre chargeur de classe.Essayez d'utiliser le
ClassLoader
que les chargés de classe en utilisant le chemin d'accès correct:Ce l'article pourrait également être utile.
OriginalL'auteur bruno conde
Essayez d'utiliser
getResourceAsStream()
au lieu de " getSystemResourceAsStream()'.OriginalL'auteur Chandra Sekar S