Verwirrung über das aktuelle Arbeitsverzeichnis in der getAbsolutePath-Methode von File

Aug 16 2020

GetAbsolutePath der Datei hat die Tendenz, dass, wenn im Dateikonstruktor ein relativer Pfad oder nur der Dateiname angegeben wird, der absolute Pfad durch Präfixieren des aktuellen Arbeitsverzeichnisses aufgelöst wird.

Die Definition des aktuellen Arbeitsverzeichnisses ist das Verzeichnis, in dem wir unser Java-Programm ausführen. In meinem Beispiel befindet sich mein Java-Programm im InnerenD:\my-app\src\App.java

Wenn ich a mache System.out.println(System.getProperty("user.dir"));

Dann sollte es idealerweise drucken D:\my-app\src

Aber es wird tatsächlich gedruckt D:\my-app

Wieso ist es so?

Antworten

1 Joni Aug 16 2020 at 15:33

Wenn Sie eine Anwendung von IntelliJ aus starten, wird ihr Arbeitsverzeichnis gemäß den Einstellungen im "Arbeitsverzeichnis" im Dialogfeld "Konfigurationen ausführen / debuggen" festgelegt .

Dort können Sie das Arbeitsverzeichnis auf einen festen Wert setzen, z D:\my-app\src. Eine andere Option ist die Verwendung einer Pfadvariablen . Die Liste der Variablen, die anscheinend verfügbar sind, kann von vielen Dingen abhängen - öffnen Sie den Dialog und sehen Sie, was verfügbar ist. Eine Option, die ich sehe, ist $FileDir$meines Erachtens das Verzeichnis der Quellcodedatei.

Sandy Aug 16 2020 at 15:29

Ich denke, ich habe die Lösung gefunden. Intellij verursachte das Problem tatsächlich, indem es den src-Ordner implizit als Quellordner festlegte. Ich habe es gefunden, indem ich zur Moduleinstellung in Intellij gegangen bin. Wenn ich dasselbe an einer Eingabeaufforderung ausgeführt habe, wird das richtige Arbeitsverzeichnis D:\my-app\src\ausgewählt, dh .