GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So erhalten Sie den relativen Pfad des aktuellen Verzeichnisses in Tomcat aus der Linux-Umgebung mit Java

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.


Linux
  1. Linux – Wie bringt man Oracle Java 7 dazu, mit Setcap Cap_net_bind_service+ep zu arbeiten?

  2. Wie erhalte ich den vollständigen Pfad einer Datei?

  3. Wie bekomme ich den Hostnamen von der IP (Linux)?

  4. Wie kopiere ich eine Datei/einen Ordner aus dem Home-Verzeichnis eines anderen Benutzers in Linux?

  5. Wie bekomme ich eine Netzmaske von Bash?

So erhalten Sie die Größe eines Verzeichnisses in Linux

So erhalten Sie Nachrichten sofort von der Befehlszeile in Linux

So erhalten Sie den Dateinamen aus dem vollständigen Pfad in Linux

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

Wie kopiert man eine Datei aus einem anderen Verzeichnis in das aktuelle?

So installieren Sie Java 8 JRE und JDK aus einer RPM-Datei unter Linux