A Java Properties használatának megkezdése

1. Áttekintés

A legtöbb Java alkalmazásnak valamikor a tulajdonságokat kell használnia, általában azért, hogy az egyszerű paramétereket kulcs-érték párokként tárolja a lefordított kódon kívül.

És így a nyelv első osztályú támogatást nyújt a tulajdonságokhoz - a java.util.Tulajdonságok - az ilyen típusú konfigurációs fájlok kezelésére tervezett segédprogram osztály.

Erre fogunk összpontosítani ebben a cikkben.

2. Tulajdonságok betöltése

2.1. A Tulajdonságok fájlokból

Kezdjük egy példával a kulcs-érték párok betöltésére a tulajdonságfájlokból; két fájlt töltünk be, amelyek rendelkezésre állnak az osztályúton:

app.properties:

verzió = 1.0 név = TestApp dátum = 2016-11-12

És katalógus:

c1 = fájlok c2 = képek c3 = videók

Vegye figyelembe, hogy bár a tulajdonságfájlok használata ajánlott.tulajdonságok, Az utótag nem szükséges.

Most nagyon egyszerűen betölthetjük őket a Tulajdonságok példa:

Karakterlánc rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); Karakterlánc appConfigPath = rootPath + "app.properties"; String catalogConfigPath = rootPath + "katalógus"; Tulajdonságok appProps = új Tulajdonságok (); appProps.load (új FileInputStream (appConfigPath)); Properties catalogProps = new Properties (); catalogProps.load (új FileInputStream (catalogConfigPath)); String appVersion = appProps.getProperty ("verzió"); assertEquals ("1.0", appVersion); assertEquals ("fájlok", catalogProps.getProperty ("c1"));

Mindaddig, amíg a fájl tartalma megfelel a tulajdonságok fájlformátumának követelményeinek, a fájl megfelelően elemezhető Tulajdonságok osztály. Itt talál további részleteket a Property fájlformátumról.

2.2. Betöltés XML fájlokból

A tulajdonságfájlok mellett Tulajdonságok osztály olyan XML fájlokat is betölthet, amelyek megfelelnek a speciális DTD specifikációknak.

Itt van egy példa kulcs-érték párok XML fájlból történő betöltésére - icons.xml:

   xml példa icon1.jpg icon2.jpg icon3.jpg 

Most töltsük be:

Karakterlánc rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); Karakterlánc ikonConfigPath = rootPath + "icons.xml"; Tulajdonságok iconProps = új Tulajdonságok (); iconProps.loadFromXML (új FileInputStream (iconConfigPath)); assertEquals ("icon1.jpg", iconProps.getProperty ("fileIcon"));

3. Get Properties

Tudjuk használni getProperty (karakterlánc-kulcs) és getProperty (karakterlánc kulcs, String alapértelmezett érték) hogy kulcsával értéket érjen el.

Ha a kulcs-érték pár létezik, akkor a két módszer egyaránt megadja a megfelelő értéket. De ha nincs ilyen kulcs-érték pár, akkor az előbbi null, az utóbbi pedig vissza fog térni alapértelmezett érték helyette.

Példa kód:

Karakterlánc appVersion = appProps.getProperty ("verzió"); Karakterlánc appName = appProps.getProperty ("név", "alapértelmezettNév"); Karakterlánc appGroup = appProps.getProperty ("csoport", "baeldung"); Karakterlánc appDownloadAddr = appProps.getProperty ("downloadAddr"); assertEquals ("1.0", appVersion); assertEquals ("TestApp", appName); assertEquals ("baeldung", appGroup); assertNull (appDownloadAddr);

Vegye figyelembe, hogy bár Tulajdonságok osztály örököl kap() módszer től Hashtable osztály, nem javasolnám, hogy használja értékének megszerzése érdekében. Mert ez kap() metódus egy Tárgy érték, amely csak átadható Húr és a getProperty () módszer már kezeli a nyers Tárgy értéket érted.

Az alábbi kód egy Kivétel:

float appVerFloat = (float) appProps.get ("verzió");

4. Állítsa be a Tulajdonságokat

Tudjuk használni setProperty () módszer egy létező kulcs-érték pár frissítésére vagy új kulcs-érték pár hozzáadására.

Példa kód:

appProps.setProperty ("név", "NewAppName"); // frissítsen egy régi értéket appProps.setProperty ("downloadAddr", "www.baeldung.com/downloads"); // új kulcs-érték pár hozzáadása String newAppName = appProps.getProperty ("név"); assertEquals ("NewAppName", newAppName); String newAppDownloadAddr = appProps.getProperty ("downloadAddr"); assertEquals ("www.baeldung.com/downloads", newAppDownloadAddr);

Vegye figyelembe, hogy bár Tulajdonságok osztály örököl put () módszer és putAll () módszer től Hashtable osztályban, nem javasolnám, hogy ugyanazon okból használja őket, mint a kap() módszer: csak Húr értékek használhatók Tulajdonságok.

Az alábbi kód nem fog úgy működni, ahogy szeretné, amikor használja getProperty () hogy megkapja az értékét, visszatér nulla:

appProps.put ("verzió", 2);

5. Távolítsa el a Tulajdonságok elemet

Ha el akar távolítani egy kulcs-érték párost, használhatja eltávolítás () módszer.

Példa kód:

Karakterlánc verzióBeforeRemoval = appProps.getProperty ("verzió"); assertEquals ("1.0", versionBeforeRemoval); appProps.remove ("verzió"); String versionAfterRemoval = appProps.getProperty ("verzió"); assertNull (versionAfterRemoval);

6. Tárolja

6.1. Tárolja a Tulajdonságok fájlokba

Tulajdonságok osztály biztosítja a bolt() módszer kulcs-érték párok kimenetére.

Példa kód:

Karakterlánc newAppConfigPropertiesFile = rootPath + "newApp.properties"; appProps.store (új FileWriter (newAppConfigPropertiesFile), "tárolás tulajdonság fájlba");

A második paraméter a megjegyzéshez szól. Ha nem szeretne megjegyzést írni, akkor egyszerűen használja a null értéket.

6.2. Tárolás XML fájlokba

Tulajdonságok osztály biztosítja a storeToXML () módszer kulcs-érték párok XML formátumban történő kiadására.

Példa kód:

Karakterlánc newAppConfigXmlFile = rootPath + "newApp.xml"; appProps.storeToXML (új FileOutputStream (newAppConfigXmlFile), "tárolás xml fájlba");

A második paraméter megegyezik a bolt() módszer.

7. Egyéb közös műveletek

Tulajdonságok osztály néhány más módszert is kínál a tulajdonságok működtetésére.

Példa kód:

appProps.list (System.out); // felsorolja az összes kulcs-érték párot Enumeration valueEnumeration = appProps.elements (); while (valueEnumeration.hasMoreElements ()) {System.out.println (valueEnumeration.nextElement ()); } Enumeration keyEnumeration = appProps.keys (); while (keyEnumeration.hasMoreElements ()) {System.out.println (keyEnumeration.nextElement ()); } int méret = appProps.size (); assertEquals (3, méret);

8. Alapértelmezett tulajdonságlista

A Tulajdonságok az objektum tartalmazhat másikat Tulajdonságok objektum alapértelmezett tulajdonságlistaként. Az alapértelmezett tulajdonságlistán keresni fog, ha a tulajdonságkulcs nem található meg az eredetiben.

Kívül "app.properties", Van egy másik fájlunk -alapértelmezett.tulajdonságok”- az osztályunkon:

alapértelmezett.tulajdonságok:

site = www.google.com name = DefaultAppName topic = Tulajdonságok kategória = core-java

Példa kód:

Karakterlánc rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); String defaultConfigPath = rootPath + "default.properties"; Tulajdonságok defaultProps = új Tulajdonságok (); defaultProps.load (új FileInputStream (defaultConfigPath)); Karakterlánc appConfigPath = rootPath + "app.properties"; Tulajdonságok appProps = új Tulajdonságok (alapértelmezett); appProps.load (új FileInputStream (appConfigPath)); assertEquals ("1.0", appVersion); assertEquals ("TestApp", appName); assertEquals ("www.google.com", defaultSite);

9. Tulajdonságok és kódolás

Alapértelmezés szerint a tulajdonságfájlok várhatóan ISO-8859-1 (Latin-1) kódolásúak, ezért az ISO-8859-1 kívüli karakterekkel rendelkező tulajdonságokat általában nem szabad használni.

Megoldhatjuk ezt a korlátozást olyan eszközök segítségével, mint a JDK native2ascii eszköz, vagy ha szükséges, a fájlok kifejezett kódolásaival.

XML fájlok esetén a loadFromXML () módszer és a storeToXML () metódus alapértelmezés szerint UTF-8 karakterkódolást használ.

Másképp kódolt XML fájl olvasásakor azonban ezt megadhatjuk a DOCTYPE nyilatkozat; az írás is elég rugalmas - megadhatjuk a kódolást a. harmadik paraméterében storeToXML () API.

10. Következtetés

Ebben a cikkben megvitattuk az alapvető kérdéseket Tulajdonságok osztályhasználat, beleértve a használat módját is Tulajdonságok töltse le és tárolja a kulcs-érték párokat mind tulajdonságokban, mind XML formátumban, hogyan működtetheti a kulcs-érték párokat a Tulajdonságok objektum, például értékek beolvasása, értékek frissítése, méretének lekérése és az alapértelmezett lista használata a Tulajdonságok tárgy.

A példa teljes forráskódja ebben a GitHub projektben érhető el.