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.