Ihr Problem ist, dass Sie nicht wissen, was das "aktuelle" Verzeichnis ist. Wenn Sie Tomcat unter Linux als Dienst starten, kann das aktuelle Verzeichnis beliebig sein. Also new File(".")
erhalten Sie einen zufälligen Platz im Dateisystem.
Verwenden der Systemeigenschaft catalina.base
ist viel besser, weil Tomcats Startskript catalina.sh
wird diese Eigenschaft festlegen. Dies funktioniert also, solange Sie nicht versuchen, Ihre App auf einem anderen Server auszuführen.
Guter Code würde so aussehen:
File catalinaBase = new File( System.getProperty( "catalina.base" ) ).getAbsoluteFile();
File propertyFile = new File( catalinaBase, "webapps/strsproperties/strs.properties" );
InputStream inputStream = new FileInputStream( propertyFile );
Wie Sie sehen können, mischt der Code keine Zeichenfolgen und Dateien. Eine Datei ist eine Datei und ein String ist nur Text. Vermeiden Sie die Verwendung von Text für Code.
Als nächstes verwende ich getAbsoluteFile()
um sicherzustellen, dass ich einen nützlichen Pfad in Ausnahmen erhalte.
Stellen Sie außerdem sicher, dass Ihr Code keine Ausnahmen verschluckt. Wenn Sie die Fehlermeldung in Ihrem Code hätten sehen können, hätten Sie sofort gesehen, dass der Code versucht hat, an der falschen Stelle zu suchen.
Schließlich ist dieser Ansatz spröde. Ihre App bricht ab, wenn sich der Pfad ändert, wenn ein anderer Webserver verwendet wird und in vielen anderen Fällen.
Erwägen Sie die Erweiterung der Webanwendung strsproperties
um HTTP-Anfragen zu akzeptieren. Auf diese Weise könnten Sie Ihre App so konfigurieren, dass sie sich mit strsproperties
verbindet über eine URL. Dies würde für jeden Webserver funktionieren, Sie könnten die Eigenschaften sogar auf einem anderen Host ablegen.
Wenn Ihr Code in einem Servlet ausgeführt wird, ist es möglicherweise einfacher, getServletContext().getRealPath("/strs.properties")
zu verwenden um den absoluten Dateipfad abzurufen.