Java-Eigenschaft "user.dir" - was genau bedeutet das?

99

Ich möchte user.dirdir als Basisverzeichnis für meine Unit-Tests verwenden (das erstellt viele Dateien). Ist es richtig, dass diese Eigenschaft auf das aktuelle Arbeitsverzeichnis verweist (z. B. mit dem Befehl 'cd' festgelegt)?

Johnny-B-Goode
quelle
2
Beachten Sie , wie unter stackoverflow.com/a/840229/3159183 angegeben , dass das -Duser.dirFlag FileObjekte betrifft (wenn ihnen kein vollständiger Pfad zugewiesen wurde ), jedoch keine FileOutPutStreamObjekte. Wenn Sie sicherstellen möchten, dass das Standardverzeichnis für beide übereinstimmt, sollten Sie dies tun, cdbevor Sie Java starten.
Selten Needy

Antworten:

140

Es ist das Verzeichnis java, von dem aus die JVM gestartet wurde. Muss sich nicht im Home-Verzeichnis des Benutzers befinden. Es kann überall dort sein, wo der Benutzer die Berechtigung hat, Java auszuführen.

Also, wenn Sie cdin /somedir, dann führen Sie Ihr Programm, user.dirwird sein /somedir.

Eine andere Eigenschaft user.homebezieht sich auf das Benutzerverzeichnis. Wie in /Users/myuseroder /home/myuseroder C:\Users\myuser.

Siehe hier für eine Liste von Systemeigenschaften und die Beschreibungen.

Whiskyspider
quelle
Korrigiert. Wie wäre es mit user.dir?
Johnny-B-Goode
3
Lesen Sie es bereits vor dem Posten. Aber "Benutzerarbeitsverzeichnis" ist keine beste Erklärung, ich hoffe, Sie stimmen zu.
Johnny-B-Goode
Bedeutet das, dass in der Tomcat-Konfiguration für alle Java-Versionen, wenn user.dirauf /usr/share/tomcatund in der Konfiguration gezeigt wird, Folgendes hinzugefügt wird: file:./configDann wird immer darauf hingewiesen /usr/share/tomcat/config?
Marcin Kapusta
8

In der Regel ist dies das Verzeichnis, in dem Ihre App (Java) gestartet wurde (Arbeitsverzeichnis). "Normalerweise", da es geändert werden kann, z. B. wenn Sie eine App mit ausführenRuntime.exec(String[] cmdarray, String[] envp, File dir)

Evgeniy Dorofeev
quelle
Ein Wert wird nur während der Junit-Testausführung durch das Maven-System benötigt.
Johnny-B-Goode
1
und wenn Sie es auf dem MAC ändern, bricht es Dinge wie diesen Test stackoverflow.com/questions/45130661/… :( :(
Dean Hiller
3

System.getProperty("user.dir") Ruft das Verzeichnis oder den Pfad des Arbeitsbereichs für das aktuelle Projekt ab


quelle