Početak rada sa svojstvima Java

1. Pregled

Većina Java aplikacija u jednom trenutku mora koristiti svojstva, općenito za pohranu jednostavnih parametara kao parova ključ / vrijednost, izvan kompajliranog koda.

I tako jezik ima prvoklasnu podršku za svojstva - java.util.Vlasnosti - klasa korisnih programa dizajnirana za rukovanje ovom vrstom konfiguracijskih datoteka.

Na to ćemo se usredotočiti u ovom članku.

2. Učitavanje svojstava

2.1. Iz datoteka Svojstva

Počnimo s primjerom za učitavanje parova ključ / vrijednost iz datoteka svojstava; učitavamo dvije datoteke koje su nam dostupne na našoj stazi:

app.properties:

verzija = 1.0 naziv = TestApp datum = 12.11.2016

I katalog:

c1 = datoteke c2 = slike c3 = videozapisi

Primijetite da iako se datotekama svojstava preporučuje korištenje “.Svojstva“, Sufiks, nije potrebno.

Sada ih možemo vrlo jednostavno učitati u Svojstva primjer:

Niz rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); Niz appConfigPath = rootPath + "app.properties"; Niz katalogaConfigPath = rootPath + "katalog"; Svojstva appProps = nova svojstva (); appProps.load (novi FileInputStream (appConfigPath)); Katalog svojstavaProps = novo Svojstva (); catalogProps.load (novi FileInputStream (catalogConfigPath)); String appVersion = appProps.getProperty ("verzija"); assertEquals ("1.0", appVersion); assertEquals ("datoteke", catalogProps.getProperty ("c1"));

Sve dok sadržaj datoteke ispunjava zahtjeve formata datoteke svojstava, može ga pravilno raščlaniti Svojstva razred. Evo više detalja o formatu datoteke svojstva.

2.2. Učitaj iz XML datoteka

Osim datoteka svojstava, Svojstva klasa također može učitati XML datoteke koje odgovaraju specifičnim DTD specifikacijama.

Evo primjera za učitavanje parova ključ / vrijednost iz XML datoteke - ikone.xml:

   xml primjer icon1.jpg icon2.jpg icon3.jpg 

Učitajmo ga sada:

Niz rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); String iconConfigPath = rootPath + "icons.xml"; Svojstva iconProps = nova svojstva (); iconProps.loadFromXML (novi FileInputStream (iconConfigPath)); assertEquals ("icon1.jpg", iconProps.getProperty ("fileIcon"));

3. Nabavite svojstva

Možemo koristiti getProperty (String ključ) i getProperty (String key, String defaultValue) da biste dobili vrijednost po njegovom ključu.

Ako postoji par ključ / vrijednost, obje metode vratit će odgovarajuću vrijednost. Ali ako ne postoji takav par ključ / vrijednost, prvi će vratiti nulu, a drugi će se vratiti zadana vrijednost umjesto toga.

Primjer koda:

Niz appVersion = appProps.getProperty ("verzija"); Niz appName = appProps.getProperty ("name", "defaultName"); Niz appGroup = appProps.getProperty ("grupa", "baeldung"); Niz appDownloadAddr = appProps.getProperty ("downloadAddr"); assertEquals ("1.0", appVersion); assertEquals ("TestApp", appName); assertEquals ("baeldung", appGroup); assertNull (appDownloadAddr);

Imajte na umu da iako Svojstva nasljeđuje klasa dobiti() metoda iz Hashtable klase, ne bih vam preporučio da ga koristite da biste dobili vrijednost. Zato što je dobiti() metoda će vratiti Objekt vrijednost na koju se može baciti samo Niz i getProperty () metoda već obrađuje sirovo Objekt vrijednost za vas.

Kod u nastavku donijet će znak Iznimka:

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

4. Postavite svojstva

Možemo koristiti setProperty () metoda za ažuriranje postojećeg para ključ / vrijednost ili dodavanje novog para ključ / vrijednost.

Primjer koda:

appProps.setProperty ("name", "NewAppName"); // ažuriranje stare vrijednosti appProps.setProperty ("downloadAddr", "www.baeldung.com/downloads"); // dodavanje novog para ključ / vrijednost String newAppName = appProps.getProperty ("name"); assertEquals ("NewAppName", newAppName); String newAppDownloadAddr = appProps.getProperty ("downloadAddr"); assertEquals ("www.baeldung.com/downloads", newAppDownloadAddr);

Imajte na umu da iako Svojstva klasa nasljeđuje staviti() metoda i putAll () metoda iz Hashtable razreda, ne bih vam preporučio da ih koristite iz istog razloga kao i za dobiti() metoda: samo Niz vrijednosti se mogu koristiti u Svojstva.

Kôd u nastavku neće raditi kako želite kada upotrebljavate getProperty () da bi dobio vrijednost, vratit će se null:

appProps.put ("verzija", 2);

5. Uklonite svojstva

Ako želite ukloniti par ključ / vrijednost, možete koristiti ukloniti() metoda.

Primjer koda:

String versionBeforeRemoval = appProps.getProperty ("verzija"); assertEquals ("1.0", versionBeforeRemoval); appProps.remove ("verzija"); String versionAfterRemoval = appProps.getProperty ("verzija"); assertNull (versionAfterRemoval);

6. Pohraniti

6.1. Spremi u svojstva datoteka

Svojstva razred pruža a trgovina () metoda za izlaz parova ključ / vrijednost.

Primjer koda:

Niz newAppConfigPropertiesFile = rootPath + "newApp.properties"; appProps.store (novi FileWriter (newAppConfigPropertiesFile), "spremi u datoteku svojstava");

Drugi je parametar za komentar. Ako ne želite napisati nikakav komentar, za njega jednostavno upotrijebite null.

6.2. Pohrani u XML datoteke

Svojstva razred također pruža a storeToXML () metoda za izlaz parova ključ / vrijednost u XML formatu.

Primjer koda:

Niz newAppConfigXmlFile = rootPath + "newApp.xml"; appProps.storeToXML (novi FileOutputStream (newAppConfigXmlFile), "spremi u xml datoteku");

Drugi je parametar isti kao u trgovina () metoda.

7. Ostale uobičajene operacije

Svojstva klasa također pruža neke druge metode za upravljanje svojstvima.

Primjer koda:

appProps.list (System.out); // popis svih parova ključ / vrijednost 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 veličina = appProps.size (); assertEquals (3, veličina);

8. Zadani popis svojstava

A Svojstva objekt može sadržavati drugi Svojstva objekt kao zadani popis svojstava. Pretražit će se zadani popis svojstava ako ključ svojstva nije pronađen u izvornom.

Osim "app.svojstva", Imamo još jednu datoteku -"zadani.svojstva”- na našem putu do razreda:

default.properties:

site = www.google.com name = DefaultAppName topic = Svojstva kategorija = core-java

Primjer koda:

Niz rootPath = Thread.currentThread (). GetContextClassLoader (). GetResource (""). GetPath (); Niz defaultConfigPath = rootPath + "default.properties"; Svojstva defaultProps = novo Svojstva (); defaultProps.load (novi FileInputStream (defaultConfigPath)); Niz appConfigPath = rootPath + "app.properties"; Svojstva appProps = nova svojstva (defaultProps); appProps.load (novi FileInputStream (appConfigPath)); assertEquals ("1.0", appVersion); assertEquals ("TestApp", appName); assertEquals ("www.google.com", defaultSite);

9. Svojstva i kodiranje

Prema zadanim postavkama, očekuje se da datoteke datoteka svojstava budu kodirane ISO-8859-1 (latinica-1), tako da se svojstva sa znakovima izvan ISO-8859-1 obično ne bi trebala koristiti.

Po potrebi možemo zaobići to ograničenje pomoću alata poput JDK native2ascii alata ili eksplicitnih kodiranja na datotekama.

Za XML datoteke, loadFromXML () metoda i storeToXML () metoda prema zadanim postavkama koristi kodiranje znakova UTF-8.

Međutim, kada čitamo XML datoteku koja je kodirana drugačije, to možemo odrediti u DOKTIP deklaracija; pisanje je također dovoljno fleksibilno - kodiranje možemo odrediti u trećem parametru storeToXML () API.

10. Zaključak

U ovom smo članku razgovarali o osnovnom Svojstva klasa, uključujući kako koristiti Svojstva učitavanje i spremanje parova ključ / vrijednost u svojstvima i XML formatu, kako raditi parove ključ / vrijednost u a Svojstva objekt, kao što su preuzimanje vrijednosti, ažuriranje vrijednosti, dobivanje njegove veličine i kako koristiti zadani popis za Svojstva objekt.

Kompletni izvorni kod za primjer dostupan je u ovom GitHub projektu.