Apabila kami bekerja pada aplikasi Java, adalah perkara biasa bahawa kami perlu bekerja dengan beberapa konfigurasi, contohnya, URL pangkalan data, port pelayan, antara lain. Daripada mengekodkan tetapan ini terus ke dalam kod, kami berminat untuk mendapatkannya dari suatu tempat di luar kod, seperti fail sifat. Atau malah boleh menyimpan konfigurasi pada masa jalan untuk membacanya kemudian.
Dalam mana-mana kes ini, kami boleh membangunkan penyelesaian kami sendiri untuk senario tertentu, contohnya, mencipta fail teks dan dalam baris pertama menyimpan URL pangkalan data, di baris kedua port pelayan, dsb. Tetapi ini boleh membosankan dan terdedah kepada ralat, jadi penyelesaian yang lebih teguh dan berskala diperlukan. Untuk jenis kes ini, Java memberikan kami penyelesaian yang sangat mudah dan cekap untuk digunakan, kelas Properties.
Properties ialah kelas yang terdapat dalam pakej java.util yang membolehkan kami menyimpan konfigurasi buat sementara waktu dalam ingatan dan secara berterusan dalam fail sifat, jadi kami kemudian boleh membacanya dan menggunakannya dalam aplikasi kami. Dengan mencipta tika kelas Properties, anda mendapat objek yang berkelakuan seperti kamus, di mana setiap konfigurasi disimpan sebagai pasangan nilai kunci.
Untuk bermula, tika kelas Properties mesti dibuat.
Properties props = new Properties();
Dengan mewarisi daripada kelas HashTable (yang seterusnya mewarisi daripada Kamus), dalam kelas Properties kita dapat melihat bahawa ia mempunyai kaedah jenis Objek, sedangkan nilai sebenarnya dijangkakan sebagai rentetan aksara atau String, dan bukan , tidak perlu menghantar String setiap kali anda bekerja dengan nilai. Dengan cara ini, walaupun terdapat kaedah lazim peta dalam contoh, dalam kebanyakan kes, ia tidak perlu digunakan. Sebagai contoh, daripada menggunakan get(kunci objek) anda boleh menggunakan getProperty(kunci rentetan).
Untuk menentukan harta, kaedah setProperty(Kunci rentetan, nilai rentetan) digunakan, seperti yang ditunjukkan oleh namanya, kaedah ini menerima dua parameter, kunci (bagaimana anda ingin memanggil harta itu) dan nilai (nilai harta benda ), memandangkan kedua-dua parameter sentiasa dijangka daripada jenis String.
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
Untuk mendapatkan harta anda boleh menggunakan kaedah getProperty(String key), yang menerima sebagai parameter kunci harta yang anda ingin perolehi Jika harta itu tidak wujud, null akan dikembalikan.
Properties props = new Properties();
Untuk mengelak daripada mendapatkan null sekiranya sifat tidak wujud, anda boleh menggunakan kaedah getProperty(String key, String defaultValue), yang menerima nilai lalai sebagai parameter kedua.
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
Memandangkan ia adalah objek jenis peta (walaupun tidak disyorkan untuk menggunakan kaedah HashTable), ia mempunyai kaedah entrySet(), tetapi seperti yang anda lihat ia adalah jenis Objek, alternatif untuk mengulangi semua sifat ialah untuk menggunakan kaedah stringPropertyNames(), yang mengembalikan satu set rentetan aksara dengan semua kunci sifat (nilai yang dikembalikan tidak dalam susunan tertentu).
var API_URL = props.getProperty("API_URL"); System.out.println(API_URL); // Output null
Cara yang lebih pantas untuk memaparkan semua sifat adalah dengan menggunakan kaedah senarai(PrintStream keluar), yang mencetak semua sifat kepada aliran keluaran yang diluluskan sebagai parameter, contohnya System.out.
var API_URL = props.getProperty("API_URL", "http://api.example.com"); System.out.println(API_URL); // Output http://api.example.com
Properties menyediakan kaedah store() dan storeToXML() supaya sifat boleh disimpan dalam format properties (key=value) dan dalam format XML (ini boleh berguna jika sifat akan digunakan dalam persekitaran yang berbeza) masing-masing. Jangan gunakan kaedah save() kerana ia sudah usang dan penggunaannya tidak disyorkan, kerana ia tidak membuang pengecualian sekiranya ralat berlaku.
Sebelum menyimpan sifat ke fail, kita boleh melakukan perkara berikut untuk mengesahkan dengan konsol apa yang sebenarnya disimpan menggunakan kaedah store() dan System.out, adalah penting untuk mengawal pengecualian yang dilemparkan.
for (String prop : props.stringPropertyNames()) { System.out.println(prop + " = " + props.getProperty(prop)); } // Output DB_PORT = 3306 DB_PASS = p4ssw0rd DB_USER = root DB_HOST = localhost
Menganalisis keputusan, anda boleh melihat bahawa dalam baris pertama ulasan yang diluluskan sebagai hujah kedua disimpan (tidak kira jika ia adalah rentetan kosong, jika ia nol ia tidak dicetak), dalam baris kedua ia disimpan tarikh dan masa di mana sifat disimpan, dan bermula dari baris ketiga sifat disimpan dalam format key=value.
Jika kaedah storeToXML() digunakan, fail dengan kandungan berikut akan diperoleh:
props.list(System.out); // Output -- listing properties -- DB_PORT=3306 DB_PASS=p4ssw0rd DB_USER=root DB_HOST=localhost
Untuk menyimpan sifat dalam fail yang dipanggil db.properties anda boleh melakukan perkara berikut:
props.store(System.out, "Database Configuration"); // Output #Database Configuration #Thu Oct 10 11:06:04 CST 2024 DB_HOST=localhost DB_PASS=p4ssw0rd DB_PORT=3306 DB_USER=root
Setelah dilaksanakan, dan jika tiada pengecualian dilemparkan, anda akan melihat bahawa fail dengan nama db.properties telah dibuat dalam direktori tempat program itu dilaksanakan, dengan kandungan berikut:
props.storeToXML(System.out, "Database Configuration"); // Output <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>Database Configuration</comment> <entry key="DB_PORT">3306</entry> <entry key="DB_PASS">p4ssw0rd</entry> <entry key="DB_USER">root</entry> <entry key="DB_HOST">localhost</entry> </properties>
Untuk menyimpan sifat dalam format XML, cuma tukar kaedah store() kepada storeToXML().
Properties props = new Properties();
Andaikan sesetengah harta telah diubah suai atau yang baharu ditambah dalam fail db.properties atau db.properties.xml, untuk memuatkan sifat daripada salah satu daripada dua fail, sama ada dalam properties atau XML, kaedah load() dan loadFromXML() boleh digunakan masing-masing. Adalah penting untuk mengawal pengecualian yang dilemparkan sekiranya fail tidak wujud atau tidak boleh dibaca.
Properties props = new Properties(); props.setProperty("DB_HOST", "localhost"); props.setProperty("DB_PORT", "3306"); props.setProperty("DB_USER", "root"); props.setProperty("DB_PASS", "p4ssw0rd");
var API_URL = props.getProperty("API_URL"); System.out.println(API_URL); // Output null
Setelah sifat dimuatkan, ia boleh dipaparkan dalam konsol untuk mengesahkan bahawa ia telah dimuatkan dengan betul.
var API_URL = props.getProperty("API_URL", "http://api.example.com"); System.out.println(API_URL); // Output http://api.example.com
Seperti yang telah kita lihat, kelas Properties membolehkan kami bekerja dengan fail harta atau konfigurasi dengan cara yang cekap dan mudah, untuk menyimpan dan membaca sifat, yang menarik untuk diketahui dan digunakan dalam aplikasi Java kami.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan kelas Properties di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!