Nieporozumienia dotyczące bieżącego katalogu roboczego w metodzie getAbsolutePath pliku
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
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.
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\
.