Programování

Vlastnosti Java v XML

Vlastnosti Java jsou základem vývoje Java po mnoho let. Dokonce i dnes se vlastnosti Java používají v populárních rámcích a nástrojích, jako je Spring Framework a Ant. Většina vlastností Java, které jsem viděl, se často používají podle osvědčeného paradigmatu name = value. Od J2SE 5 je však snadné načíst (a uložit) vlastnosti ve formátu XML.

Podle mých zkušeností typický soubor vlastností vypadá nějak takto, jak je zobrazeno dále.

příklady. vlastnosti

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 usnadňuje načítání vlastností z XML (a ukládání vlastností do XML). Dokumentace API založená na Javadocu pro třídu Vlastnosti pojednává o obou formátech. Tato dokumentace ukazuje DTD použitou k definování gramatiky XML vlastností:

DTD nám ukazuje, že vlastnosti uložené v XML musí mít jako kořenový prvek vyžadovaný od dobře vytvořeného XML a může mít nulu nebo jednu prvky vnořené v této kořenové značce. Z této DTD se také dozvídáme, že název nula mnoha prvků jsou povoleny a že vstup prvek může obsahovat tělo dat a jediný pojmenovaný atribut klíč. Na základě tohoto DTD bychom mohli ručně napsat kompatibilní soubor vlastností založený na XML, ale ještě jednodušší způsob, jak to vidět, je číst v tradičním souboru vlastností párů název / hodnota a uložit jej zpět ve formátu XML. To je přesně to, co příští třída Java, VlastnostiPříklady, dělá.

PropertiesExamples.java

balíček dustin.properties; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; importovat java.io.OutputStream; importovat java.util.Properties; veřejná třída PropertiesExamples {/ ** konstruktor bez argumentů. * / public PropertiesExamples () {} / ** * Získejte tradiční vlastnosti ve formátu name = value. * * @param filePathAndName Cesta a název souboru vlastností (bez přípony * .properties). * @return Vlastnosti načtené z poskytnutého souboru. * / public Properties loadTraditionalProperties (final String filePathAndName) {final Properties properties = new Properties (); zkuste {final FileInputStream in = new FileInputStream (filePathAndName); properties.load (in); přiložit(); } catch (FileNotFoundException fnfEx) {System.err.println ("Nelze načíst vlastnosti ze souboru" + filePathAndName); } catch (IOException ioEx) {System.err.println ("IOException narazil při čtení z" + filePathAndName); } návratové vlastnosti; } / ** * Uchovávejte poskytované vlastnosti ve formátu XML. * * @param sourceProperties Vlastnosti, které mají být uloženy ve formátu XML. * @param out OutputStream, do kterého se mají psát vlastnosti formátované XML. * / public void storeXmlProperties (final Properties sourceProperties, final OutputStream out) {try {sourceProperties.storeToXML (out, "This is easy!"); } catch (IOException ioEx) {System.err.println ("CHYBA při pokusu o uložení vlastností v XML!"); }} / ** * Ukládejte poskytované vlastnosti ve formátu XML do poskytovaného souboru. * * @param sourceProperties Vlastnosti, které mají být uloženy ve formátu XML. * @param pathAndFileName Cesta a název souboru, do kterého budou zapsány * vlastnosti ve formátu XML. * / 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 ("CHYBA zápisu do" + pathAndFileName); } catch (IOException ioEx) {System.err.println ("CHYBA při pokusu o zápis vlastností XML do souboru" + pathAndFileName); }} / ** * Spustí hlavní příklady. * * @param arguments Argumenty příkazového řádku; nikdo nepředpokládal. * / public static void main (final String [] argumenty) {final PropertiesExamples me = new PropertiesExamples (); konečné vlastnosti inputProperties = me.loadTraditionalProperties ("examples.properties"); me.storeXmlPropertiesToFile (inputProperties, "examples-xml.properties"); }} 

Třída zobrazená výše se načte v souboru vlastností uvedeném dříve a poté jej vypíše zpět ve formátu XML. Skutečné řádky kódu provádějící většinu práce jsou malé, ale díky mnoha kontrolovaným výjimkám spojeným se vstupem / výstupem souboru je základ kódu mnohem větší.

Při spuštění tohoto kódu se vygeneruje následující výstup:

examples-xml.properties

  To je snadné! //www.softwaresummit.com/ //www.rmoug.org/ //marxsoftware.blogspot.com/ //www.javaworld.com/ //www.oracle.com/technology/index.html 

Tento vygenerovaný soubor XML obsahuje stejné páry název / hodnota jako tradiční soubor vlastností zobrazený dříve, lze jej načíst jako tradiční verzi pomocí Properties.loadFromXML a obsahuje komentář, který byl předán metodě Properties.storeToXML.

Závěr

Je poměrně jednoduché načíst vlastnosti z XML a uložit je jako XML. XML je však v zásadě omezen na stejné paradigma párů název / hodnota jako soubory tradičních vlastností. Proto nejsme schopni využít výhod hierarchické povahy XML k použití vztahů složitějších než jeden klíč (název) k jedné hodnotě. Primárním důvodem, proč je možné použít podporu Java pro vlastnosti založené na XML, je to, že XML byl používán pro jiné nástroje nebo rámce a vlastnosti v XML byly přístupnější pro jiný nástroj nebo rámec.

Tento příběh „Vlastnosti Java v XML“ byl původně publikován společností JavaWorld.

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