Začíname s vlastnosťami Java

1. Prehľad

Väčšina aplikácií Java musí v určitom okamihu používať vlastnosti, zvyčajne na ukladanie jednoduchých parametrov ako párov kľúč - hodnota mimo kompilovaného kódu.

Preto má jazyk prvotriednu podporu pre vlastnosti - java.util.Vlastnosti - trieda nástrojov určená na prácu s týmto typom konfiguračných súborov.

Na to sa v tomto článku zameriame.

2. Načítanie vlastností

2.1. Zo súborov vlastností

Začnime príkladom na načítanie párov kľúč - hodnota zo súborov vlastností; načítavame dva súbory, ktoré máme k dispozícii na našej triednej ceste:

app.properties:

verzia = 1.0 name = TestApp date = 2016-11-12

A katalóg:

c1 = súbory c2 = obrázky c3 = videá

Všimnite si, že hoci sa súbory vlastností odporúčajú používať „.vlastnosti“, Prípona, nie je to potrebné.

Teraz ich môžeme veľmi jednoducho načítať do a Vlastnosti inštancia:

Reťazec rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); Reťazec appConfigPath = rootPath + "app.properties"; Reťazec catalogConfigPath = rootPath + "catalogue"; Vlastnosti appProps = nové Vlastnosti (); appProps.load (nový FileInputStream (appConfigPath)); Vlastnosti catalogProps = nové Vlastnosti (); catalogProps.load (nový FileInputStream (catalogConfigPath)); Reťazec appVersion = appProps.getProperty ("verzia"); assertEquals ("1.0", appVersion); assertEquals ("súbory", catalogProps.getProperty ("c1"));

Pokiaľ obsah súboru zodpovedá požiadavkám na formát súboru vlastností, je možné ho správne analyzovať Vlastnosti trieda. Tu nájdete ďalšie podrobnosti o formáte súboru nehnuteľnosti.

2.2. Načítať zo súborov XML

Okrem súborov vlastností Vlastnosti trieda môže načítať aj súbory XML, ktoré zodpovedajú špecifickým špecifikáciám DTD.

Tu je príklad načítania párov kľúč - hodnota zo súboru XML - ikony.xml:

   príklad xml ikona1.jpg ikona2.jpg ikona3.jpg 

Načítajme to:

Reťazec rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); Reťazec iconConfigPath = rootPath + "icons.xml"; Vlastnosti ikonaProps = nové Vlastnosti (); ikonaProps.loadFromXML (nový FileInputStream (ikonaConfigPath)); assertEquals ("icon1.jpg", iconProps.getProperty ("fileIcon"));

3. Získajte vlastnosti

Môžeme použiť getProperty (reťazcový kľúč) a getProperty (kľúč reťazca, reťazec defaultValue) získať hodnotu jeho kľúčom.

Ak existuje pár kľúč - hodnota, obidve metódy vrátia zodpovedajúcu hodnotu. Ak ale taký pár kľúč - hodnota neexistuje, prvý vráti nulu a druhý vráti predvolená hodnota namiesto toho.

Príklad kódu:

Reťazec appVersion = appProps.getProperty ("verzia"); Reťazec appName = appProps.getProperty ("name", "defaultName"); Reťazec appGroup = appProps.getProperty ("group", "baeldung"); Reťazec appDownloadAddr = appProps.getProperty ("downloadAddr"); assertEquals ("1.0", appVersion); assertEquals ("TestApp", appName); assertEquals ("baeldung", appGroup); assertNull (appDownloadAddr);

Všimnite si, že hoci Vlastnosti trieda dedí dostať () metóda z Hashtable triedy, neodporúčal by som vám ju používať na získanie hodnoty. Pretože to je dostať () metóda vráti Objekt hodnotu, ktorú je možné použiť iba na String a getProperty () metóda už zvláda raw Objekt hodnotu pre vás.

Nasledujúci kód vloží znak Výnimka:

float appVerFloat = (float) appProps.get ("verzia");

4. Nastavte vlastnosti

Môžeme použiť setProperty () metóda na aktualizáciu existujúceho páru kľúč - hodnota alebo pridanie nového páru kľúč - hodnota.

Príklad kódu:

appProps.setProperty ("name", "NewAppName"); // aktualizácia starej hodnoty appProps.setProperty ("downloadAddr", "www.baeldung.com/downloads"); // pridať nový pár kľúč - hodnota String newAppName = appProps.getProperty ("name"); assertEquals ("NewAppName", newAppName); Reťazec newAppDownloadAddr = appProps.getProperty ("downloadAddr"); assertEquals ("www.baeldung.com/downloads", newAppDownloadAddr);

Všimnite si, že hoci Vlastnosti trieda dedí put () metóda a putAll () metóda z Hashtable triedy, nedoporučoval by som vám ich používať z rovnakého dôvodu ako pre dostať () metóda: iba String hodnoty je možné použiť v Vlastnosti.

Kód uvedený nižšie nebude pri používaní fungovať podľa vašich predstáv getProperty () pre získanie jeho hodnoty sa vráti nulový:

appProps.put ("verzia", ​​2);

5. Odstráňte vlastnosti

Ak chcete odstrániť pár kľúč - hodnota, môžete použiť odstrániť () metóda.

Príklad kódu:

Reťazec versionBeforeRemoval = appProps.getProperty ("verzia"); assertEquals ("1.0", versionBeforeRemoval); appProps.remove ("verzia"); Reťazec versionAfterRemoval = appProps.getProperty ("verzia"); assertNull (versionAfterRemoval);

6. Skladujte

6.1. Uložiť do Súbory vlastností

Vlastnosti trieda poskytuje a obchod () metóda na výstup párov kľúč - hodnota.

Príklad kódu:

Reťazec newAppConfigPropertiesFile = rootPath + "newApp.properties"; appProps.store (nový FileWriter (newAppConfigPropertiesFile), "uložiť do súboru vlastností");

Druhý parameter je určený na komentár. Ak nechcete napísať žiadny komentár, jednoducho na to použite null.

6.2. Uložiť do súborov XML

Vlastnosti trieda poskytuje aj a storeToXML () metóda na výstup párov kľúč - hodnota vo formáte XML.

Príklad kódu:

Reťazec newAppConfigXmlFile = rootPath + "newApp.xml"; appProps.storeToXML (nový FileOutputStream (newAppConfigXmlFile), "uložiť do súboru xml");

Druhý parameter je rovnaký ako v parametri obchod () metóda.

7. Ostatné bežné operácie

Vlastnosti trieda tiež poskytuje niektoré ďalšie metódy na obsluhu týchto vlastností.

Príklad kódu:

appProps.list (System.out); // vypísať všetky páry kľúč - hodnota Enumeration valueEnumeration = appProps.elements (); while (valueEnumeration.hasMoreElements ()) {System.out.println (valueEnumeration.nextElement ()); } Výčet keyEnumeration = appProps.keys (); while (keyEnumeration.hasMoreElements ()) {System.out.println (keyEnumeration.nextElement ()); } int size = appProps.size (); assertEquals (3, veľkosť);

8. Predvolený zoznam vlastností

A Vlastnosti objekt môže obsahovať ďalší Vlastnosti objekt ako predvolený zoznam vlastností. Ak sa kľúč vlastnosti nenájde v pôvodnom, bude prehľadaný predvolený zoznam vlastností.

Okrem toho „app.properties„, Máme ďalší súbor -“default.properties”- na našej triede:

default.properties:

site = www.google.com name = DefaultAppName topic = Kategória vlastností = core-java

Príklad kódu:

Reťazec rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); Reťazec defaultConfigPath = rootPath + "default.properties"; Vlastnosti defaultProps = nové Vlastnosti (); defaultProps.load (nový FileInputStream (defaultConfigPath)); Reťazec appConfigPath = rootPath + "app.properties"; Vlastnosti appProps = nové vlastnosti (defaultProps); appProps.load (nový FileInputStream (appConfigPath)); assertEquals ("1.0", appVersion); assertEquals ("TestApp", appName); assertEquals ("www.google.com", defaultSite);

9. Vlastnosti a kódovanie

V predvolenom nastavení sa očakáva, že súbory vlastností budú kódované podľa normy ISO-8859-1 (Latin-1), takže vlastnosti so znakmi mimo normy ISO-8859-1 by sa nemali všeobecne používať.

Toto obmedzenie môžeme obísť pomocou nástrojov, ako je napríklad nástroj JDK native2ascii, alebo v prípade potreby explicitné kódovanie súborov.

V prípade súborov XML sa loadFromXML () metóda a storeToXML () metóda štandardne používa kódovanie znakov UTF-8.

Pri čítaní inak zakódovaného súboru XML to však môžeme určiť v DOCTYPE vyhlásenie; zápis je tiež dostatočne flexibilný - kódovanie môžeme určiť v treťom parametri súboru storeToXML () API.

10. Záver

V tomto článku sme si rozobrali základné Vlastnosti použitie triedy, vrátane spôsobu použitia Vlastnosti načítať a uložiť páry kľúč - hodnota vo vlastnostiach aj vo formáte XML, ako pracovať s pármi kľúč - hodnota v a Vlastnosti objekt, napríklad načítanie hodnôt, aktualizácia hodnôt, získanie jeho veľkosti a spôsob použitia predvoleného zoznamu pre a Vlastnosti objekt.

Kompletný zdrojový kód príkladu je k dispozícii v tomto projekte GitHub.