Hiii ... Ich möchte den Inhalt der Eigenschaftendatei mit getSystemResourceAsStream () in das InputStream-Klassenobjekt bringen. Ich habe den Beispielcode erstellt. Es funktioniert gut mit der main () -Methode, aber wenn ich das Projekt bereitstellen und auf dem Server ausführen, kann der Dateipfad der Eigenschaft nicht abgerufen werden ... so dass inputstream-Objekt null Wert speichert.
Beispielcode ist hier ..
%Vor%Ich stelle das Projekt bereit und laufe auf dem Server,
Das klingt wie eine JSP / Servlet-Webapplikation. In diesem Fall müssen Sie das ClassLoader
verwenden, das wie folgt erhalten wird:
Dieser hat Zugriff auf die Klassenpfadpfade all , die mit der fraglichen Webanwendung verknüpft sind, und Sie sind nicht mehr davon abhängig, welcher Elternklassenlader (eine Webanwendung hat mehr als eine!) Ihre Klasse geladen hat.
Dann müssen Sie auf diesem Classloader einfach getResourceAsStream()
, um eine Klassenpfad-Ressource als Stream zu erhalten, nicht die getSystemResourceAsStream()
, die davon abhängt, wie die Webanwendung gestartet wird. Sie wollen auch nicht davon abhängig sein, da Sie bei externem Hosting keine Kontrolle darüber haben:
Dies ist schließlich robuster als Ihre ursprüngliche getSystemResourceAsStream()
-Ansicht und die Class#getResourceAsStream()
, wie von anderen vorgeschlagen.
Der SystemClassLoader
lädt Ressourcen von java.class.path
witch maps auf die Systemvariable CLASSPATH
. In Ihrer lokalen Anwendung haben Sie wahrscheinlich die Ressource, die in java.class.path
variable geladen werden soll. Auf dem Server ist es eine andere Geschichte, weil der Server höchstwahrscheinlich Ihre Ressourcen von einem anderen Klassenlader lädt.
Versuchen Sie es mit der ClassLoader
, die die Klasse geladen hat, indem Sie den korrekten Pfad verwenden:
Dieser Artikel könnte ebenfalls nützlich sein.
Verwenden Sie getResourceAsStream()
anstelle von 'getSystemResourceAsStream ()'.
Tags und Links java classloader