In welchem ​​Ordner sucht FileInputStream?

8

Ich benutze die Linie

%Vor%

, um eine Eigenschaftendatei ohne Angabe eines Pfades zu öffnen.

Beim Ausführen unter Apache Tomcat kann die Datei nicht gefunden werden. Ich legte die Datei in den Stammordner der Anwendung.

In welchem ​​Ordner sucht Java?

Ich kann den Pfad nicht ändern, weil der Code nicht von mir ist.

    
Alex 02.05.2011, 10:24
quelle

4 Antworten

15

Es wird in dem Ordner aussehen, der das Ergebnis von

ist %Vor%

und das könnte überall sein. Das hängt vom aktuellen Arbeitsverzeichnis ab, wenn der Tomcat-Server gestartet wird.

Versuchen Sie, ein kleines Servlet zu laden, das diese Informationen beim Laden ausgibt, wenn Sie nicht aus den Standardprotokollen oder dem Tomcat-Startverfahren herausfinden können.

    
PeterMmm 02.05.2011, 10:28
quelle
5

Es wird im Arbeitsverzeichnis des JVM-Prozesses und nicht im Stammverzeichnis von WAR angezeigt. Wo dieses Arbeitsverzeichnis ist, hängt davon ab, wie der Tomcat-Prozess gestartet wurde.

Als solches sollten Sie das nicht tun. Sie sollten Referenzen auf Ressourcen innerhalb des WAR erhalten, indem Sie das ServletContext fragen Objekt (das verschiedene Methoden zum Nachschlagen von Ressourcenströmen hat), z von innen ein Servlet:

%Vor%

Außerdem ist es eine schlechte Übung, auf Ressourcen innerhalb einer WAR als tatsächliche Dateien zu verweisen. Dies funktioniert nur, wenn der WAR in eine Verzeichnisstruktur aufgelöst wird und nicht funktioniert, wenn das Servlet den Befehl enthält, den WAR als nicht explodierte .WAR -Datei auszuführen. Indem Sie sich an die Methoden getResource...() halten, halten Sie die Dinge neutral und portabel.

Wenn Sie jedoch, wie Sie sagen, den Code nicht ändern können, ist das ein Problem, weil der Code kaputt und schlecht geschrieben ist. Sie müssen herausfinden, wie Tomcat gestartet wird, damit das Arbeitsverzeichnis am "richtigen" Ort ist. Das kann dazu führen, dass die Startskripte gehackt werden.

    
skaffman 02.05.2011 10:29
quelle
0

Normalerweise funktioniert es standardmäßig im Home-Verzeichnis.

Um Eigenschaften zu lesen, sollten Sie Class.getResourceAsStream (String)

verwenden

BTW, ein geeigneterer Ort wäre META-INF dir

    
SJuan76 02.05.2011 10:26
quelle
0

Wenn ich mich richtig erinnere: Tomcat durchsucht den Klassenpfad nach ALL-Ressourcen ... daher würde "myfile.properties" (ohne Pfad) in irgendeinem "obersten" Verzeichnis im Klassenpfad stehen. Das "Standard-Top" (wenn Sie keinen Klassenpfad angeben) ist WEB-INF / classes; Tatsächlich denke ich, Tomcat fügt dem Klassenpfad immer (logisch) WEB-INF / Klassen hinzu, auch wenn Sie nicht möchten, dass ... er seit Jahren nicht mehr mit Tomcat gespielt hat.

    
corlettk 02.05.2011 10:32
quelle

Tags und Links