Saya memiliki file JAR di mana semua kode saya diarsipkan untuk dijalankan. Saya harus mengakses file properti yang perlu diubah / diedit sebelum setiap kali dijalankan. Saya ingin menyimpan file properti di direktori yang sama di mana file JAR. Apakah ada cara untuk memberi tahu Java untuk mengambil file properti dari direktori itu?
Catatan: Saya tidak ingin menyimpan file properti di direktori home atau melewatkan path file properti dalam argumen baris perintah.
java
properties
Neil
sumber
sumber
user.home
. Saat memeriksa file, pertama-tama periksa keberadaan file yang diubah pada sistem file, dan jika tidak ada, muat file default. " BTW "Saya tidak mau .." Apa yang Anda inginkan kurang penting daripada apa yang berhasil dan praktis. Menyimpan aplikasi. pengaturan dalam direktori aplikasi sangat tidak disarankan oleh Oracle & MS (& mungkin yang lain).Jawaban:
Jadi, Anda ingin memperlakukan
.properties
file Anda pada folder yang sama dengan jar utama / runnable sebagai file daripada sebagai sumber daya dari jar utama / runnable. Dalam hal ini, solusi saya sendiri adalah sebagai berikut:Hal pertama yang pertama: arsitektur file program Anda akan seperti ini (dengan asumsi program utama Anda adalah main.jar dan file properti utamanya adalah main.properties):
Dengan arsitektur ini, Anda dapat memodifikasi properti apa pun di file properti utama menggunakan editor teks apa pun sebelum atau saat main.jar Anda berjalan (tergantung pada kondisi program saat ini) karena itu hanya file berbasis teks. Misalnya, file properti utama Anda mungkin berisi:
Jadi, ketika Anda menjalankan program utama dari folder root / base-nya, biasanya Anda akan menjalankannya seperti ini:
atau, langsung:
Di main.jar Anda, Anda perlu membuat beberapa metode utilitas untuk setiap properti yang ditemukan di file properti utama Anda; katakanlah
app.version
properti akan memilikigetAppVersion()
metode sebagai berikut:Di bagian mana pun dari program utama yang membutuhkan
app.version
nilai, kami menyebut metodenya sebagai berikut:sumber
./
folder root yang sama (level direktori yang sama) seperti apa yang telah saya jelaskan dalam arsitektur organisasi file. (sesuai kebutuhan yang ditetapkan oleh poster asli)java -jar build/main.jar
, Anda perlu meletakkan file properti dibuild
folder juga sehingga berada pada level direktori yang sama dengan toples.java -jar path/to/jar/file
. Tapi saya menemukan solusinya dalam pertanyaan lain:String path = ClassLoader.getSystemClassLoader().getResource(".").getPath() + "/main.properties";
Saya melakukannya dengan cara lain.
sumber
Selalu ada masalah mengakses file di direktori file Anda dari file jar. Menyediakan classpath dalam file jar sangat terbatas. Alih-alih mencoba menggunakan file bat atau file sh untuk memulai program Anda. Dengan cara itu Anda dapat menentukan classpath Anda sesuai keinginan Anda, merujuk folder apa pun di sistem.
Periksa juga jawaban saya untuk pertanyaan ini:
membuat file .exe untuk proyek java yang berisi sqlite
sumber
Saya memiliki kasus serupa: menginginkan
*.jar
file saya untuk mengakses file di direktori di sebelah*.jar
file tersebut. Lihat juga JAWABAN INI .Struktur file saya adalah:
Saya dapat memuat file (katakanlah
some.txt
) ke InputStream di dalam*.jar
file dengan yang berikut:Kemudian lakukan apa pun yang Anda mau dengan
stream
sumber
Saya punya contoh melakukan keduanya dengan classpath atau dari konfigurasi eksternal dengan log4j2.properties
sumber
Ini bekerja untuk saya. Muat file properti Anda dari
current directory
Pastikan, itu
java.properties
ada dicurrent directory
. Anda bisa menulis skrip startup kecil yang beralih ke direktori yang benar sebelumnya, sepertiDalam proyek Anda, cukup letakkan
java.properties
file di root proyek Anda, untuk membuat kode ini bekerja dari IDE Anda juga.sumber
Di sini, jika Anda menyebutkan
.getPath()
bahwa itu akan mengembalikan jalur Jar dan saya kira Anda akan membutuhkan induknya untuk merujuk ke semua file konfigurasi lainnya yang ditempatkan dengan jar. Kode ini berfungsi di Windows. Tambahkan kode di dalam kelas utama.sumber