Properti Java dalam XML

Properti Java telah menjadi pokok pengembangan Java selama bertahun-tahun. Bahkan saat ini, properti Java digunakan dalam kerangka kerja dan alat populer seperti Kerangka Musim Semi dan Semut. Sebagian besar properti Java yang saya lihat sering digunakan mengikuti paradigma try-and-true name = value. Namun, sejak J2SE 5, mudah untuk memuat (dan menyimpan) properti dalam format XML.

Dalam pengalaman saya, file properti tipikal terlihat seperti yang ditampilkan berikutnya.

example.properties

url.blog.dustin=//marxsoftware.blogspot.com/ url.javaworld=//www.javaworld.com/ url.coloradosoftwaresummit=//www.softwaresummit.com/ url.otn=//www.oracle.com/technology/index.html url.rmoug=//www.rmoug.org/ 

J2SE 5 memudahkan untuk memuat properti dari XML (dan menyimpan properti ke XML). Dokumentasi API berbasis Javadoc untuk kelas Properti membahas kedua format tersebut. Dokumentasi ini menunjukkan DTD yang digunakan untuk menentukan tata bahasa XML Properti:

DTD menunjukkan kepada kita bahwa properti yang disimpan dalam XML harus memiliki elemen root yang diperlukan untuk XML yang dibentuk dengan baik dan dapat memiliki nol atau satu elemen yang bersarang di tag root ini. Kami juga belajar dari DTD ini bahwa nol hingga banyak nama elemen diperbolehkan dan bahwa entryelemen dapat berisi badan data dan satu atribut bernama key. Berdasarkan DTD ini, kita dapat menulis file properti berbasis XML yang kompatibel dengan tangan, tetapi cara yang lebih mudah untuk melihatnya adalah dengan membaca dalam file properti tradisional pasangan nama / nilai dan menyimpannya kembali dalam format XML. Inilah yang dilakukan oleh kelas Java berikutnya, PropertiesExamples .

PropertiesExamples.java

package dustin.properties; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Properties; public class PropertiesExamples { /** No-arguments constructor. */ public PropertiesExamples() {} /** * Get traditional properties in name=value format. * * @param filePathAndName Path and name of properties file (without the * .properties extension). * @return Properties read in from provided file. */ public Properties loadTraditionalProperties( final String filePathAndName) { final Properties properties = new Properties(); try { final FileInputStream in = new FileInputStream(filePathAndName); properties.load(in); in.close(); } catch (FileNotFoundException fnfEx) { System.err.println("Could not read properties from file " + filePathAndName); } catch (IOException ioEx) { System.err.println( "IOException encountered while reading from " + filePathAndName); } return properties; } /** * Store provided properties in XML format. * * @param sourceProperties Properties to be stored in XML format. * @param out OutputStream to which to write XML formatted properties. */ public void storeXmlProperties( final Properties sourceProperties, final OutputStream out) { try { sourceProperties.storeToXML(out, "This is easy!"); } catch (IOException ioEx) { System.err.println("ERROR trying to store properties in XML!"); } } /** * Store provided properties in XML format to provided file. * * @param sourceProperties Properties to be stored in XML format. * @param pathAndFileName Path and name of file to which XML-formatted * properties will be written. */ public void storeXmlPropertiesToFile( final Properties sourceProperties, final String pathAndFileName) { try { FileOutputStream fos = new FileOutputStream(pathAndFileName); storeXmlProperties(sourceProperties, fos); fos.close(); } catch (FileNotFoundException fnfEx) { System.err.println("ERROR writing to " + pathAndFileName); } catch (IOException ioEx) { System.err.println( "ERROR trying to write XML properties to file " + pathAndFileName); } } /** * Runs main examples. * * @param arguments Command-line arguments; none anticipated. */ public static void main(final String[] arguments) { final PropertiesExamples me = new PropertiesExamples(); final Properties inputProperties = me.loadTraditionalProperties("examples.properties"); me.storeXmlPropertiesToFile(inputProperties, "examples-xml.properties"); } } 

Kelas yang ditunjukkan di atas membaca di file properti yang dicantumkan sebelumnya dan kemudian menuliskannya kembali dalam format XML. Baris kode sebenarnya yang melakukan sebagian besar pekerjaan berukuran kecil, tetapi banyak pengecualian yang dicentang yang terkait dengan input / output file membuat basis kode jauh lebih besar.

Ketika kode ini dijalankan, keluaran berikut dihasilkan:

example-xml.properties

  This is easy! //www.softwaresummit.com/ //www.rmoug.org/ //marxsoftware.blogspot.com/ //www.javaworld.com/ //www.oracle.com/technology/index.html  

File XML yang dihasilkan ini berisi pasangan nama / nilai yang sama dengan file properti tradisional yang ditampilkan sebelumnya, dapat dibaca seperti versi tradisional menggunakan Properties.loadFromXML, dan menyertakan komentar yang diteruskan ke metode Properties.storeToXML.

Kesimpulan

Sangat mudah untuk memuat properti dari XML dan menyimpannya sebagai XML. Namun, XML pada dasarnya terbatas pada paradigma yang sama dari pasangan nama / nilai sebagai file properti tradisional. Oleh karena itu, kami tidak dapat memanfaatkan sifat hierarki XML untuk menggunakan hubungan yang lebih kompleks dari satu kunci (nama) ke satu nilai. Alasan utama seseorang mungkin menggunakan dukungan Java untuk properti berbasis XML adalah jika XML digunakan untuk alat atau kerangka kerja lain dan properti dalam XML lebih mudah diakses oleh alat atau kerangka kerja lain.

Artikel ini, "Properti Java dalam XML", awalnya diterbitkan oleh JavaWorld.