Προγραμματισμός

Ιδιότητες Java σε XML

Οι ιδιότητες Java αποτελούν βασικό στοιχείο της ανάπτυξης Java για πολλά χρόνια. Ακόμα και σήμερα, οι ιδιότητες Java χρησιμοποιούνται σε δημοφιλή πλαίσια και εργαλεία όπως το Spring Framework και το Ant. Οι περισσότερες από τις ιδιότητες Java που έχω δει συχνά ακολουθούν το δοκιμασμένο και πραγματικό όνομα = τιμή. Ωστόσο, από το J2SE 5, ήταν εύκολο να φορτώσετε (και να αποθηκεύσετε) ιδιότητες σε μορφή XML.

Σύμφωνα με την εμπειρία μου, το τυπικός Το αρχείο ιδιοτήτων μοιάζει με αυτό που φαίνεται στη συνέχεια.

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 διευκόλυνε τη φόρτωση ιδιοτήτων από XML (και αποθήκευση ιδιοτήτων σε XML). Η τεκμηρίωση API που βασίζεται σε Javadoc για την κατηγορία Properties συζητά και τις δύο μορφές. Αυτή η τεκμηρίωση δείχνει το DTD που χρησιμοποιείται για τον καθορισμό της γραμματικής Properties XML:

Το DTD μας δείχνει ότι οι ιδιότητες που είναι αποθηκευμένες σε XML πρέπει να έχουν ως το ριζικό στοιχείο που απαιτείται από καλά σχηματισμένο XML και μπορεί να έχει μηδέν ή ένα στοιχεία ένθετα σε αυτήν την ριζική ετικέτα. Μαθαίνουμε επίσης από αυτό το DTD ότι το όνομα μηδέν έως πολλά στοιχεία επιτρέπονται και ότι ένα είσοδος Το στοιχείο μπορεί να περιέχει ένα σώμα δεδομένων και ένα μεμονωμένο χαρακτηριστικό κλειδί. Με βάση αυτό το DTD, θα μπορούσαμε να γράψουμε ένα συμβατό αρχείο ιδιοτήτων που βασίζεται σε XML με το χέρι, αλλά ένας ακόμη πιο εύκολος τρόπος για να το δείτε είναι να διαβάσετε σε ένα παραδοσιακό αρχείο ιδιοτήτων ζευγών ονομάτων / τιμών και να το αποθηκεύσετε ξανά σε μορφή XML. Αυτό ακριβώς είναι το επόμενο μάθημα Java, Ιδιότητες Παραδείγματα, κάνει.

PropertiesExamples.java

πακέτο dustin.properties; εισαγωγή java.io.FileInputStream; εισαγωγή java.io.FileNotFoundException; εισαγωγή java.io.FileOutputStream; εισαγωγή java.io.IOException; εισαγωγή java.io.OutputStream; εισαγωγή java.util.Properties; δημόσια κατηγορία PropertiesExamples {/ ** Κατασκευαστής χωρίς ορίσματα. * / public PropertiesExamples () {} / ** * Λάβετε παραδοσιακές ιδιότητες σε όνομα = μορφή τιμής. * * @param filePathAndName Path και όνομα του αρχείου ιδιοτήτων (χωρίς την επέκταση * .properties). * Το @return Properties διαβάζεται από το παρεχόμενο αρχείο. * / public Properties loadTraditionalProperties (final String filePathAndName) {final Properties properties = new Properties (); δοκιμάστε το {final FileInputStream in = new FileInputStream (filePathAndName); properties.load (σε); εσωκλείω(); } catch (FileNotFoundException fnfEx) {System.err.println ("Δεν ήταν δυνατή η ανάγνωση ιδιοτήτων από το αρχείο" + filePathAndName); } catch (IOException ioEx) {System.err.println ("IOException αντιμετώπισε κατά την ανάγνωση από" + filePathAndName); } ιδιότητες επιστροφής; } / ** * Αποθηκεύστε τις παρεχόμενες ιδιότητες σε μορφή XML. * * @param sourceProperties Properties για αποθήκευση σε μορφή XML. * @param out OutputStream για να γράψετε ιδιότητες με μορφή XML. * / public void storeXmlProperties (final Properties sourceProperties, final OutputStream out) {δοκιμάστε {sourceProperties.storeToXML (έξω, "Αυτό είναι εύκολο!"); } catch (IOException ioEx) {System.err.println ("ΣΦΑΛΜΑ προσπαθεί να αποθηκεύσει ιδιότητες σε XML!"); }} / ** * Αποθηκεύστε τις παρεχόμενες ιδιότητες σε μορφή XML στο παρεχόμενο αρχείο. * * @param sourceProperties Properties για αποθήκευση σε μορφή XML. * @param pathAndFileName Path και όνομα αρχείου στο οποίο θα γραφτούν οι ιδιότητες με μορφή XML. * / public void storeXmlPropertiesToFile (final Properties sourceProperties, final String pathAndFileName) {δοκιμάστε {FileOutputStream fos = new FileOutputStream (pathAndFileName); storeXmlProperties (sourceProperties, fos); fos.close (); } catch (FileNotFoundException fnfEx) {System.err.println ("ΣΦΑΛΜΑ γράφοντας σε" + pathAndFileName); } catch (IOException ioEx) {System.err.println ("ERROR προσπαθεί να γράψει ιδιότητες XML στο αρχείο" + pathAndFileName); }} / ** * Εκτελεί κύρια παραδείγματα. * * Ορίσματα @param Ορίσματα γραμμής εντολών. κανένα αναμενόμενο. * / public static void main (final επιχειρήματα String []) {final PropertiesExamples me = new PropertiesExamples (); final Properties inputProperties = me.loadTraditionalProperties ("example.properties"); me.storeXmlPropertiesToFile (inputProperties, "example-xml.properties"); }} 

Η κλάση που εμφανίζεται παραπάνω διαβάζει στο αρχείο ιδιοτήτων που αναφέρθηκε νωρίτερα και στη συνέχεια το ξαναγράφει σε μορφή XML Οι πραγματικές γραμμές κώδικα που κάνουν το μεγαλύτερο μέρος της εργασίας είναι μικρές σε αριθμό, αλλά οι πολλές ελεγμένες εξαιρέσεις που σχετίζονται με την είσοδο / έξοδο αρχείου κάνουν τη βάση κώδικα πολύ μεγαλύτερη.

Όταν εκτελείται αυτός ο κωδικός, δημιουργείται η ακόλουθη έξοδος:

παραδείγματα-xml.properties

  Αυτό είναι εύκολο! //www.softwaresummit.com/ //www.rmoug.org/ //marxsoftware.blogspot.com/ //www.javaworld.com/ //www.oracle.com/technology/index.html 

Αυτό το αρχείο XML που δημιουργήθηκε περιέχει τα ίδια ζεύγη ονόματος / τιμής με το παραδοσιακό αρχείο ιδιοτήτων που εμφανίστηκε νωρίτερα, μπορεί να διαβαστεί όπως η παραδοσιακή έκδοση χρησιμοποιώντας το Properties.loadFromXML και περιλαμβάνει το σχόλιο που μεταβιβάστηκε στη μέθοδο Properties.storeToXML.

συμπέρασμα

Είναι αρκετά εύκολο να φορτώσετε ιδιότητες από XML και να τις αποθηκεύσετε ως XML. Ωστόσο, το XML περιορίζεται ουσιαστικά στο ίδιο παράδειγμα ζεύγους ονόματος / τιμής με τα παραδοσιακά αρχεία ιδιοτήτων. Επομένως, δεν μπορούμε να εκμεταλλευτούμε την ιεραρχική φύση της XML για να χρησιμοποιήσουμε σχέσεις πιο περίπλοκες από ένα κλειδί (όνομα) σε μία τιμή. Ο πρωταρχικός λόγος που κάποιος μπορεί να χρησιμοποιήσει την υποστήριξη της Java για ιδιότητες που βασίζονται σε XML είναι εάν το XML χρησιμοποιείται για άλλα εργαλεία ή πλαίσια και οι ιδιότητες σε XML ήταν πιο προσιτές στο άλλο εργαλείο ή πλαίσιο.

Αυτή η ιστορία, "Java Properties in XML" δημοσιεύθηκε αρχικά από το JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found