Verwirrung über das aktuelle Arbeitsverzeichnis in der getAbsolutePath-Methode von File
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
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.
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 .