Katakanlah saya memiliki kelas utama saya C:\Users\Justian\Documents\
. Bagaimana saya bisa membuat program saya menunjukkan bahwa itu masuk C:\Users\Justian\Documents
?
Hard-Coding bukanlah pilihan - ini harus dapat disesuaikan jika dipindahkan ke lokasi lain.
Saya ingin membuang banyak file CSV ke dalam folder, meminta program mengenali semua file, lalu memuat data dan memanipulasinya. Saya benar-benar hanya ingin tahu cara menavigasi ke folder itu.
java
path
working-directory
Justian Meyer
sumber
sumber
Jawaban:
Salah satu caranya adalah dengan menggunakan properti sistem
System.getProperty("user.dir");
ini akan memberi Anda "Direktori kerja saat ini ketika properti diinisialisasi". Ini mungkin yang Anda inginkan. untuk mengetahui di manajava
perintah dikeluarkan, dalam kasus Anda di direktori dengan file yang akan diproses, meskipun file .jar yang sebenarnya mungkin berada di tempat lain di mesin. Memiliki direktori dari file .jar sebenarnya tidak terlalu berguna dalam banyak kasus.Berikut ini akan mencetak direktori saat ini dari mana perintah dipanggil terlepas dari di mana file .class atau .jar file .class berada.
jika Anda masuk
/User/me/
dan file .jar Anda yang berisi kode di atas ada di/opt/some/nested/dir/
perintahjava -jar /opt/some/nested/dir/test.jar Test
akan keluarcurrent dir = /User/me
.Sebagai bonus, Anda juga harus menggunakan parser argumen baris perintah berorientasi objek yang baik. Saya sangat merekomendasikan JSAP , Java Simple Argument Parser. Ini akan memungkinkan Anda menggunakan
System.getProperty("user.dir")
dan sebagai alternatif meneruskan sesuatu yang lain untuk mengatasi perilaku tersebut. Solusi yang jauh lebih mudah dirawat. Ini akan membuat pengoperan direktori ke proses sangat mudah dilakukan, dan dapat digunakan kembaliuser.dir
jika tidak ada yang diteruskan.sumber
user.dir
jauh lebih mudah digunakan. System.getProperty ("user.dir");Gunakan
CodeSource#getLocation()
. Ini berfungsi dengan baik di file JAR juga. Anda dapat memperolehCodeSource
olehProtectionDomain#getCodeSource()
danProtectionDomain
pada gilirannya dapat diperoleh denganClass#getProtectionDomain()
.Perbarui sesuai komentar OP:
Itu akan membutuhkan hardcoding / mengetahui jalur relatifnya di program Anda. Lebih baik pertimbangkan untuk menambahkan jalurnya ke classpath sehingga Anda bisa menggunakan
ClassLoader#getResource()
Atau melewati jalannya sebagai
main()
argumen.sumber
getLocation()
metode. Yang lain jelas tidak akan berhasil.Mencetak sesuatu seperti:
Perhatikan bahwa
File.getCanonicalPath()
melempar IOException yang dicentang tetapi akan menghapus hal-hal seperti../../../
sumber
sumber
Saya baru saja menggunakan:
...
sumber
Paths.get("").toAbsolutePath();
Paths.get("my/file").toAbsolutePath()
saya mendapatkan/my/file
, yang pasti bukan cwd.Jika Anda ingin mendapatkan direktori kerja Anda saat ini, gunakan baris berikut
sumber
Jika Anda menginginkan jalur absolut dari kode sumber saat ini, saran saya adalah:
sumber
Siapa bilang kelas utama Anda ada dalam file di harddisk lokal? Kelas lebih sering digabungkan di dalam file JAR, dan terkadang dimuat melalui jaringan atau bahkan dihasilkan dengan cepat.
Jadi, apa yang sebenarnya ingin Anda lakukan? Mungkin ada cara untuk melakukannya yang tidak membuat asumsi tentang asal kelas.
sumber