Programmering

Java-egenskaper i XML

Java-egenskaper har vært en stift for Java-utvikling i mange år. Selv i dag brukes Java-egenskaper i populære rammer og verktøy som Spring Framework og Ant. De fleste Java-egenskapene som jeg har sett brukt følger ofte det prøvde og sanne navnet = verdiparadigmet. Siden J2SE 5 har det imidlertid vært enkelt å laste inn (og lagre) egenskaper i XML-format.

Etter min erfaring er den typisk egenskaper-filen ser ut som det som vises neste.

eksempler. eiendommer

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

J2SE 5 gjorde det enkelt å laste inn egenskaper fra XML (og lagre egenskaper til XML). Den Javadoc-baserte API-dokumentasjonen for Properties-klassen diskuterer begge formatene. Denne dokumentasjonen viser DTD som brukes til å definere XML-grammatikken for egenskaper:

DTD viser oss at egenskaper som er lagret i XML må ha som rotelementet som kreves av velformet XML og kan ha null eller en elementer nestet i denne rotkoden. Vi lærer også av denne DTD at null til mange elementer heter er tillatt og at en inngang elementet kan inneholde et dataelement og et enkelt attributt som heter nøkkel. Basert på denne DTD, kan vi skrive en kompatibel XML-basert eiendomsfil for hånd, men en enda enklere måte å se en er å lese i en tradisjonell eiendomsfil med navn / verdipar og lagre den tilbake i XML-format. Dette er akkurat hva neste Java-klasse, Egenskaper Eksempler, gjør.

PropertiesExamples.java

pakke støv. eiendommer; importere java.io.FileInputStream; importere java.io.FileNotFoundException; importere java.io.FileOutputStream; importere java.io.IOException; importere java.io.OutputStream; importere java.util.Properties; offentlig klasse Egenskaper Eksempler {/ ** Ingen argumenter konstruktør. * / public PropertiesExamples () {} / ** * Få tradisjonelle egenskaper i navn = verdiformat. * * @param filePathAndName Sti og navn på egenskapsfil (uten * .properties-utvidelsen). * @return Properties innlest fra gitt fil. * / public Properties loadTraditionalProperties (final String filePathAndName) {final Properties egenskaper = nye egenskaper (); prøv {final FileInputStream i = ny FileInputStream (filePathAndName); egenskaper. last (i); i. lukk (); } catch (FileNotFoundException fnfEx) {System.err.println ("Kunne ikke lese egenskaper fra fil" + filePathAndName); } catch (IOException ioEx) {System.err.println ("IOException oppstått mens du leser fra" + filePathAndName); } returnere egenskaper; } / ** * Lagre gitt eiendommer i XML-format. * * @param sourceProperties Egenskaper som skal lagres i XML-format. * @param ut OutputStream som du skal skrive XML-formaterte egenskaper til. * / public void storeXmlProperties (final Properties sourceProperties, final OutputStream out) {prøv {sourceProperties.storeToXML (ut, "Dette er enkelt!"); } fange (IOException ioEx) {System.err.println ("FEIL prøver å lagre egenskaper i XML!"); }} / ** * Lagre gitt egenskaper i XML-format til gitt fil. * * @param sourceProperties Egenskaper som skal lagres i XML-format. * @param pathAndFileName Sti og navn på filen som XML-formatert * egenskaper skal skrives til. * / public void storeXmlPropertiesToFile (final Properties sourceProperties, final String pathAndFileName) {prøv {FileOutputStream fos = ny FileOutputStream (pathAndFileName); storeXmlProperties (sourceProperties, fos); fos.close (); } fange (FileNotFoundException fnfEx) {System.err.println ("FEIL som skriver til" + pathAndFileName); } catch (IOException ioEx) {System.err.println ("FEIL prøver å skrive XML-egenskaper til fil" + pathAndFileName); }} / ** * Kjører hovedeksempler. * * @param argumenter Kommandolinje argumenter; ingen forventet. * / public static void main (final String [] argumenter) {final PropertiesExamples me = new PropertiesExamples (); final Properties inputProperties = me.loadTraditionalProperties ("eksempler.egenskaper"); me.storeXmlPropertiesToFile (inputProperties, "eksempler-xml.properties"); }} 

Klassen vist ovenfor leser i egenskapsfilen som er oppført tidligere, og skriver den deretter ut i XML-format. De faktiske kodelinjene som gjør det meste av arbeidet er lite, men de mange avmerkede unntakene knyttet til filinngang / -utgang gjør kodebasen mye større.

Når denne koden kjøres, genereres følgende utdata:

eksempler-xml.egenskaper

  Dette er enkelt! //www.softwaresummit.com/ //www.rmoug.org/ //marxsoftware.blogspot.com/ //www.javaworld.com/ //www.oracle.com/technology/index.html 

Denne genererte XML-filen inneholder samme navn / verdipar som den tradisjonelle egenskapsfilen som er vist tidligere, kan leses inn som den tradisjonelle versjonen ved hjelp av Properties.loadFromXML, og inkluderer kommentaren som ble sendt til Properties.storeToXML-metoden.

Konklusjon

Det er ganske greit å laste inn egenskaper fra XML og lagre dem som XML. Imidlertid er XML i det vesentlige begrenset til samme paradigme for navn / verdipar som tradisjonelle eiendomsfiler. Derfor kan vi ikke dra nytte av XMLs hierarkiske natur for å bruke forhold som er mer komplekse enn en nøkkel (navn) til en verdi. Den primære grunnen til at man kan bruke Java's støtte for XML-baserte egenskaper, er hvis XML ble brukt til andre verktøy eller rammer, og egenskapene i XML var mer tilgjengelige for det andre verktøyet eller rammeverket.

Denne historien, "Java Properties in XML" ble opprinnelig utgitt av JavaWorld.

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