Saya memiliki kode berikut mencoba membaca file properti:
Properties prop = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("myProp.properties");
prop.load(stream);
Saya mendapatkan pengecualian di baris terakhir. Secara khusus:
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:46)
at Assignment1.BaseStation.main(BaseStation.java:87)
terima kasih, Nikos
java
properties
nikos
sumber
sumber
getResourceAsStream
mencari file di classpath. Jika file properti Anda ada di direktori paketmyPackage
, maka gunakan/myPackage/myProp.properties
sebagai jalur.conf
paket untuk menyimpan semua file konfigurasi saya dan hierarki file saya adalah:,myproject ->src, conf, test
bagaimana cara memuat properti dengan menambahkan garis miring sebelumnya?Anda dapat menemukan informasi di halaman ini:
http://www.mkyong.com/java/java-properties-file-examples/
sumber
Reader
diprop.load(reader)
, menurut dokumentasi:The specified stream remains open after this method returns
Anda dapat menggunakan
ResourceBundle
kelas untuk membaca file properti.sumber
conf/filename.properties
berdasarkan direktori root proyeksumber
Anda tidak dapat menggunakan kata kunci ini seperti -
dalam konteks statis.
Hal terbaik adalah memahami konteks aplikasi seperti -
maka Anda dapat memuat file sumber daya dari classpath -
Ini akan bekerja untuk konteks statis dan non-statis dan bagian terbaiknya adalah file properti ini dapat berada di paket / folder apa pun yang termasuk dalam jalur kelas aplikasi.
sumber
File Anda harus tersedia seperti
com/example/foo/myProps.properties
di classpath. Kemudian muat sebagai:sumber
jika config.properties Anda tidak ada di direktori src / main / resource dan berada di direktori root proyek maka Anda perlu melakukan sesuatu seperti di bawah ini: -
sumber
Pastikan bahwa nama file benar dan file tersebut benar-benar berada di jalur kelas.
getResourceAsStream()
akan mengembalikan null jika ini bukan kasus yang menyebabkan baris terakhir memunculkan pengecualian.Jika myProp.properties ada di direktori root proyek Anda, gunakan
/myProp.properties
saja.sumber
Anda dapat menggunakan java.io.InputStream untuk membaca file seperti yang ditunjukkan di bawah ini:
sumber
Mengingat konteksnya
loader.getResourceAsStream("myPackage/myProp.properties")
harus digunakan.Memimpin
'/'
tidak bekerja denganClassLoader.getResourceAsStream(String)
metode.Alternatifnya, Anda bisa menggunakan
Class.getResourceAsStream(String)
metode, yang digunakan'/'
untuk menentukan apakah jalur itu mutlak atau relatif terhadap lokasi kelas.Contoh:
sumber
Jika jalur file properti dan jalur kelas java Anda sama, Anda harus melakukannya.
Sebagai contoh:
sumber
Tak satu pun dari jawaban saat ini yang menunjukkan
InputStream
penutupan (ini akan membocorkan deskriptor file), dan / atau tidak berurusan dengan.getResourceAsStream()
mengembalikan null ketika sumber daya tidak ditemukan (ini akan mengarah ke aNullPointerException
dengan pesan yang membingungkan,"inStream parameter is null"
). Anda membutuhkan sesuatu seperti berikut ini:sumber
Untuk file Reading Properties dengan urutan aslinya:
sumber
Banyak jawaban di sini menjelaskan metode berbahaya di mana mereka membuat contoh aliran input file tetapi tidak mendapatkan referensi ke aliran input untuk menutup aliran nanti. Hal ini menyebabkan aliran input yang menggantung dan kebocoran memori. Cara yang benar untuk memuat properti harus serupa dengan berikut ini:
Perhatikan pembuatan instance aliran input file dalam
try-with-resources
blok. Karena aFileInputStream
autocloseable, itu akan ditutup secara otomatis setelahtry-with-resources
blokir keluar. Jika Anda ingin menggunakan sederhanatry
blok, Anda harus secara eksplisit menutupnya menggunakanfis.close();
difinally
blok.sumber
Saya melihat bahwa pertanyaan itu adalah pertanyaan lama. Jika ada yang menemukan ini di masa depan, saya pikir ini adalah salah satu cara sederhana untuk melakukannya. Simpan file properti di folder proyek Anda.
sumber
Tentukan jalur mulai dari src seperti di bawah ini:
sumber