Kebingungan atas direktori kerja saat ini dalam metode getAbsolutePath File
File getAbsolutePath memiliki kecenderungan bahwa jika jalur relatif atau hanya nama file disediakan di konstruktor file, maka itu akan menyelesaikan jalur absolut dengan mengawali direktori kerja saat ini.
Definisi dari direktori kerja saat ini adalah direktori tempat kita menjalankan Program Java. Dalam contoh saya, program java saya berada di dalamD:\my-app\src\App.java
Ketika saya melakukan a System.out.println(System.getProperty("user.dir"));
Maka idealnya harus dicetak D:\my-app\src
Tapi ini sebenarnya sedang mencetak D:\my-app
Kenapa gitu?
Jawaban
Saat Anda memulai aplikasi dari IntelliJ, direktori kerjanya disetel sesuai dengan apa yang disetel di "Direktori kerja" dalam dialog "Konfigurasi Jalankan / Debug" .
Di sana, Anda dapat mengatur direktori kerja ke nilai tetap seperti D:\my-app\src
. Pilihan lainnya adalah menggunakan variabel jalur . Daftar variabel yang tersedia tampaknya dapat bergantung pada banyak hal - buka dialog dan lihat apa yang tersedia. Salah satu opsi yang saya lihat adalah $FileDir$
yang saya bayangkan akan menjadi direktori file kode sumber.
Saya rasa saya menemukan solusinya. Intellij sebenarnya menyebabkan masalah ini dengan secara implisit menyetel folder src sebagai folder sumber. Saya menemukannya dengan membuka pengaturan modul dalam Intellij. Ketika saya menjalankan hal yang sama dari prompt perintah, direktori kerja yang benar yaitu D:\my-app\src\
dipilih.