getSystemResourceAsStream() gibt null zurück
Hiii...
Ich möchte den Inhalt der properties-Datei in die Klasse InputStream-Objekt verwenden getSystemResourceAsStream(). Ich gebaut habe den Beispiel-code. Es funktioniert gut mit main () - Methode,aber wenn ich das Projekt bereitstellen und ausführen auf dem server, Eigenschaften, Dateipfad nicht erhalten ... so inputstream-Objekt speichern von null-Wert.
Beispiel-code ist hier..
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"));
}
}
- Warum sind die Verwendung mit den system-classloader, sondern als normal?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das klingt wie eine JSP/Servlet-webapplication. In diesem Fall müssen Sie die
ClassLoader
die erhalten wird, wie folgt:Diesem hat man Zugang zu den alle classpath Pfade gebunden an die webapplication in Frage und du bist nicht mehr abhängig davon, welche übergeordneten classloader, der eine webapp hat mehr als eine!) geladen hat Sie Ihre Klasse.
Dann, auf dieser classloader, müssen Sie nur rufen
getResourceAsStream()
um einen classpath-Ressource als stream, nicht diegetSystemResourceAsStream()
abhängig ist, wie die webapplication gestartet. Sie wollen nicht abhängig sein, die als gut, da Sie keine Kontrolle über externe hosting:Dies ist endlich robuster als Ihre erste
getSystemResourceAsStream()
Ansatz und dieClass#getResourceAsStream()
wie vorgeschlagen, die von anderen.Den
SystemClassLoader
lädt Ressourcen ausjava.class.path
Hexe Karten die system-variableCLASSPATH
. In Ihrer lokalen Anwendung, haben Sie wahrscheinlich die Ressource, die Ihr versuchen zu laden, konfiguriert injava.class.path
variable. In dem server ist eine andere Geschichte, weil die meisten wahrscheinlich lädt der server Ihre Ressourcen aus einem anderen class loader.Versuchen, mit den
ClassLoader
geladen-Klasse mit dem richtigen Pfad:Diese Artikel kann auch hilfreich sein.
Versuchen Sie es mit
getResourceAsStream()
statt 'getSystemResourceAsStream()'.