Saya menulis pengganti drop-in untuk aplikasi lama di Java. Salah satu persyaratannya adalah bahwa file ini yang digunakan aplikasi lama harus dibaca apa adanya ke dalam Aplikasi Java yang baru. Format file ini adalah gaya windows umum, dengan bagian header dan pasangan kunci = nilai, menggunakan # sebagai karakter untuk berkomentar.
Saya mencoba menggunakan kelas Properties dari Java, tetapi tentu saja itu tidak akan berhasil jika ada bentrokan nama antara header yang berbeda.
Jadi pertanyaannya adalah, apa cara termudah untuk membaca di file INI dan mengakses kuncinya?
IniFile
kelas itu diambil, cobaIni ini = new Ini(new File("/path/to/file"));
Wini
kelas, seperti yang diilustrasikan dalam tutorial "Satu Menit"; yangprefs.node("something").get("val", null)
tidak bekerja dengan cara yang saya harapkan.Seperti yang disebutkan , ini4j dapat digunakan untuk mencapai ini. Izinkan saya menunjukkan satu contoh lainnya.
Jika kami memiliki file INI seperti ini:
Berikut ini akan ditampilkan
value
ke STDOUT:Lihat tutorial untuk lebih banyak contoh.
sumber
Sesederhana 80 baris:
sumber
Berikut adalah contoh sederhana namun kuat, menggunakan kelas apache HierarchicalINIConfiguration :
Konfigurasi Commons memiliki sejumlah dependensi runtime . Minimal, diperlukan commons-lang dan commons-logging . Bergantung pada apa yang Anda lakukan dengannya, Anda mungkin memerlukan pustaka tambahan (lihat tautan sebelumnya untuk detailnya).
sumber
Atau dengan Java API standar Anda dapat menggunakan java.util.Properties :
sumber
Properties
kelas tidak mendapatkan nilai yang berisi \native2ascii
Dalam 18 baris, perpanjang
java.util.Properties
to parse menjadi beberapa bagian:sumber
Pilihan lainnya adalah Apache Commons Config juga memiliki kelas untuk memuat dari file INI . Itu memang memiliki beberapa dependensi runtime , tetapi untuk file INI hanya memerlukan koleksi Commons, lang, dan logging.
Saya telah menggunakan Commons Config pada proyek dengan properti dan konfigurasi XML-nya. Ini sangat mudah digunakan dan mendukung beberapa fitur yang cukup kuat.
sumber
Anda bisa mencoba JINIFile. Merupakan terjemahan TIniFile dari Delphi, tetapi untuk java
https://github.com/SubZane/JIniFile
sumber
Saya pribadi lebih suka Confucious .
Ini bagus, karena tidak memerlukan dependensi eksternal, ukurannya kecil - hanya 16K, dan secara otomatis memuat file ini saat inisialisasi. Misalnya
sumber
solusi hoat4 sangat elegan dan sederhana. Ia bekerja untuk semua file ini waras . Namun, saya telah melihat banyak yang memiliki karakter spasi yang tidak lolos di kuncinya .
Untuk mengatasi ini, saya telah mengunduh dan memodifikasi salinan
java.util.Properties
. Meskipun ini sedikit tidak ortodoks, dan jangka pendek, mod sebenarnya hanyalah beberapa baris dan cukup sederhana. Saya akan ajukan proposal ke komunitas JDK untuk memasukkan perubahan tersebut.Dengan menambahkan variabel kelas internal:
Saya mengontrol pemrosesan yang terkait dengan pemindaian untuk titik pemisahan kunci / nilai. Saya mengganti kode pencarian karakter spasi dengan metode privat kecil yang mengembalikan boolean tergantung pada status variabel di atas.
Metode ini digunakan di dua tempat dalam metode privat
load0(...)
.Ada juga metode publik untuk mengaktifkannya, tetapi akan lebih baik menggunakan versi asli
Properties
jika pemisah spasi tidak menjadi masalah untuk aplikasi Anda.Jika ada minat, saya bersedia memposting kode ke
IniFile.java
file saya . Ia bekerja dengan salah satu versiProperties
.sumber
Menggunakan jawaban oleh @Aerospace, saya menyadari bahwa sah untuk file INI memiliki bagian tanpa nilai kunci apa pun. Dalam kasus ini, penambahan ke peta tingkat atas harus terjadi sebelum nilai kunci apa pun ditemukan, misalnya (diperbarui minimal untuk Java 8):
sumber
Sesederhana ini .....
sumber