Ohjelmointi

Java-ominaisuudet XML: ssä

Java-ominaisuudet ovat olleet keskeinen osa Java-kehitystä monien vuosien ajan. Jopa nykyään Java-ominaisuuksia käytetään suosituissa kehyksissä ja työkaluissa, kuten Spring Framework ja Ant. Suurin osa Java-ominaisuuksista, joita olen nähnyt käyttävän usein, noudattavat käytännössä käytetty nimi = arvo -paradigmaa. J2SE 5: n jälkeen ominaisuuksia on kuitenkin ollut helppo ladata (ja tallentaa) XML-muodossa.

Kokemukseni mukaan tyypillinen ominaisuudet tiedosto näyttää jotain seuraavalta.

esimerkkejä. ominaisuudet

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

J2SE 5 helpotti ominaisuuksien lataamista XML: stä (ja ominaisuuksien tallentamista XML: ään). Ominaisuudet-luokan Javadoc-pohjainen API-dokumentaatio käsittelee molempia muotoja. Tämä dokumentaatio näyttää DTD: n, jota käytetään Ominaisuudet XML-kieliopin määrittelyyn:

DTD osoittaa meille, että XML: ään tallennetuilla ominaisuuksilla on oltava hyvin muodostetusta XML: stä vaadittavana juurielementtinä, ja sillä voi olla nolla tai yksi tässä juuritagissa sisäkkäiset elementit. Opimme myös tästä DTD: stä nollan monille elementeille ovat sallittuja ja että merkintä -elementti voi sisältää tietorungon ja yhden nimetyn määritteen avain. Tämän DTD: n perusteella voisimme kirjoittaa yhteensopivan XML-pohjaisen ominaisuustiedoston käsin, mutta vieläkin helpompi tapa nähdä se on lukea perinteiseen nimi / arvo-parien ominaisuustiedostoon ja tallentaa se takaisin XML-muotoon. Juuri seuraava Java-luokka, OminaisuudetEsimerkkejä, tekee.

PropertiesExamples.java

pakkaus pöly. ominaisuudet; tuo java.io.FileInputStream; tuo java.io.FileNotFoundException; tuo java.io.FileOutputStream; tuo java.io.IOException; tuo java.io.OutputStream; tuo java.util.Kiinteistöt; public class PropertiesExamples {/ ** Ei argumentteja -rakentaja. * / public PropertiesExamples () {} / ** * Hanki perinteiset ominaisuudet name = value -muodossa. * * @param filePathAndName Ominaisuustiedoston polku ja nimi (ilman * .properties-laajennusta). * @return Properties lukea toimitetusta tiedostosta. * / julkiset ominaisuudet loadTraditionalProperties (viimeinen merkkijono filePathAndName) {lopulliset ominaisuudet ominaisuudet = uudet ominaisuudet (); kokeile {final FileInputStream in = new FileInputStream (filePathAndName); ominaisuudet.lataus (in); aidata(); } catch (FileNotFoundException fnfEx) {System.err.println ("Ominaisuuksia ei voitu lukea tiedostosta" + filePathAndName); } catch (IOException ioEx) {System.err.println ("IOException havaittu lukiessa kohteesta" + filePathAndName); } palautusominaisuudet; } / ** * Tallenna toimitetut ominaisuudet XML-muodossa. * * @param sourceProperties Ominaisuudet, jotka tallennetaan XML-muodossa. * @param out OutputStream, johon XML-muotoiset ominaisuudet kirjoitetaan. * / public void storeXmlProperties (final Properties sourceProperties, final OutputStream out) {kokeile {sourceProperties.storeToXML (out, "Tämä on helppoa!"); } catch (IOException ioEx) {System.err.println ("VIRHE yrittää tallentaa ominaisuuksia XML: ään!"); }} / ** * Tallenna toimitetut ominaisuudet XML-muodossa toimitettuun tiedostoon. * * @param sourceProperties Ominaisuudet, jotka tallennetaan XML-muodossa. * @param pathAndFileName Polku ja tiedoston nimi, johon XML-muotoiset * ominaisuudet kirjoitetaan. * / public void storeXmlPropertiesToFile (final Properties sourceProperties, final String pathAndFileName) {kokeile {FileOutputStream fos = uusi FileOutputStream (pathAndFileName); storeXmlProperties (sourceProperties, fos); fos.sulje (); } catch (FileNotFoundException fnfEx) {System.err.println ("VIRHE kirjoitetaan" + pathAndFileName); } catch (IOException ioEx) {System.err.println ("VIRHE yrittää kirjoittaa XML-ominaisuuksia tiedostoon" + pathAndFileName); }} / ** * Suorittaa tärkeimpiä esimerkkejä. * * @param argumentit Komentoriviargumentit; kukaan ei ennakoinut. * / public static void main (viimeiset merkkijono [] argumentit) {final PropertiesExamples me = new PropertiesExamples (); lopulliset ominaisuudet inputProperties = me.loadTraditionalProperties ("esimerkkejä.ominaisuudet"); me.storeXmlPropertiesToFile (inputProperties, "esimerkit-xml.ominaisuudet"); }} 

Yllä esitetty luokka lukee aiemmin luetellun ominaisuustiedoston ja kirjoittaa sen sitten takaisin XML-muodossa. Suurimman osan työstä tekevien todellisten koodirivien lukumäärä on pieni, mutta tiedoston syötteeseen / tulostukseen liittyvät monet tarkistetut poikkeukset tekevät koodipohjan paljon suuremmaksi.

Kun tämä koodi suoritetaan, luodaan seuraava lähtö:

esimerkit-xml.ominaisuudet

  Tämä on helppoa! //www.softwaresummit.com/ //www.rmoug.org/ //marxsoftware.blogspot.com/ //www.javaworld.com/ //www.oracle.com/technology/index.html 

Tämä luotu XML-tiedosto sisältää samat nimi / arvo-parit kuin aiemmin esitetty perinteinen ominaisuustiedosto, se voidaan lukea samalla tavalla kuin perinteinen versio Properties.loadFromXML: llä ja sisältää kommentin, joka välitettiin Properties.storeToXML-menetelmälle.

Johtopäätös

Ominaisuuksien lataaminen XML: stä ja niiden tallentaminen XML: nä on melko yksinkertaista. XML on kuitenkin olennaisesti rajoitettu samaan paradigmaan nimi / arvo parit kuin perinteiset ominaisuustiedostot. Siksi emme pysty hyödyntämään XML: n hierarkkista luonnetta käyttämään suhteita, jotka ovat monimutkaisempia kuin yksi avain (nimi) yhteen arvoon. Ensisijainen syy, miksi Java-tukea voidaan käyttää XML-pohjaisiin ominaisuuksiin, on, jos XML: ää käytettiin muille työkaluille tai kehyksille ja että XML: n ominaisuudet olivat helpommin saavutettavissa toiselle työkalulle tai kehykselle.

Tämän tarinan, "Java Properties in XML", julkaisi alun perin JavaWorld.

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