Nieporozumienia dotyczące bieżącego katalogu roboczego w metodzie getAbsolutePath pliku

Aug 16 2020

Metoda getAbsolutePath pliku ma tendencję do tego, że jeśli w konstruktorze pliku zostanie podana ścieżka względna lub tylko nazwa pliku, wówczas ścieżka bezwzględna zostanie rozwiązana przez dodanie przedrostka bieżącego katalogu roboczego.

Definicja bieżącego katalogu roboczego to katalog, w którym uruchamiamy nasz program Java. W moim przykładzie mój program java znajduje się w środkuD:\my-app\src\App.java

Kiedy robię System.out.println(System.getProperty("user.dir"));

Wtedy powinien idealnie wydrukować D:\my-app\src

Ale tak naprawdę to drukowanie D:\my-app

Dlaczego tak się dzieje?

Odpowiedzi

1 Joni Aug 16 2020 at 15:33

Kiedy uruchamiasz aplikację z IntelliJ, jej katalog roboczy jest ustawiany zgodnie z ustawieniami w „Katalog roboczy” w oknie dialogowym „Konfiguracje uruchamiania / debugowania” .

Tam możesz ustawić katalog roboczy na stałą wartość, taką jak D:\my-app\src. Inną opcją jest użycie zmiennej ścieżki . Lista dostępnych zmiennych najwyraźniej może zależeć od wielu rzeczy - otwórz okno dialogowe i zobacz, co jest dostępne. Jedyną opcją, którą widzę, jest to, $FileDir$co wyobrażam sobie, byłby katalogiem pliku kodu źródłowego.

Sandy Aug 16 2020 at 15:29

Myślę, że znalazłem rozwiązanie. Intellij faktycznie powodował problem, niejawnie ustawiając folder src jako folder źródłowy. Znalazłem to, przechodząc do ustawień modułu w Intellij. Kiedy uruchomiłem to samo z wiersza poleceń, wybrany jest właściwy katalog roboczy, tj D:\my-app\src\.