Konfigurációs fájlok módosítása / olvasása Java programunkkal.

Indította Szilárd, 2013 január 04, 03:23:46 DÉLUTÁN

Előző téma - Következő téma

Szilárd

Üdv mindenkinek!

Ebben a kis topikban szeretném bemutatni azt, hogy hogyan is olvashatunk be / módosíthatunk konfigurációs fájlt a programunkkal Java-ban. (*.ini, *.conf)

Először is kreáljunk egy <file_name>.ini fájlt. (Bármilyen nevet adhattok neki, amilyet csak szeretnétek, azonban jelen esetben így fogom jelölni a neveket, mint változókat)
Írjuk bele mondjuk ezt:
Kód (ini) Kijelölés

; This is a comment row.
; Hello, this is my configuration file.
; An other comment row.

[variables]
MyVariable=Apple


Miután ez megvan, kezdhetjük is a programunk megírását.

Itt egy teljes kód a konfigurációs fájl olvasójáról, később kifejtem majd a részeit:
LINK_TO_REPOSITORY

Ez a fájl egy teszt side-project része, tehát, ha feljebb léptettek, akkor megtaláljátok a main függvényt, amely működőképessé teszi a gépezetet. (config fájl megtalálható a %ROOT%/data/conf/configuration_test.ini helyen)

A kód kifejtése:
Először is importálnunk kell a megfelelő csomagokat, amelyek szükségesek lesznek a programunk megírásában.
Úgy tehetjük meg, hogy ezt írjuk be a forráskódba:
Kód (java) Kijelölés

import java.io.*; // Ez importájla az io csomagban található osztályokat, azonban a nested classokat nem! (beágyazott osztályokat)
import java.util.Properties; // Ez kizárólag az util csomagban található Properties osztályt importálja.


Mivel osztályunkat public-ként definiáltuk (public class ConfigurationTester{...}), ezért a fájlunk nevének is ennek kell lennie, különben nem tudjuk leforgatni a forrásfájlt.

Második lépés: Bevezetünk egy protected változót, ami annyit takar, hogy kizárólag a "test.hu.colibricore.ColibriTests" csomagban lévő osztályok érhetik el, más osztályok nem. (Ebben különbözik a publictól)
Ez a változó fogja majd "hordozni" a konfigurációs fájlból kinyert adatot. (Miután a ConfigurationTester fájl konstruktora meghívódott, azután ez a fájl adatot fog tartalmazni a programunk következő indulásáig, vagy amig nem "reseteljük".

Harmadik lépés: Bevezetjük az osztályunk konstruktorát. (Minden esetben be van vezetve egy konstruktor, de alapértelmezetten üres! - public MyClass(){})
Például ha meg akarunk hívni egy osztályt, és azon belül is egy metódust (pl. aminek a visszatérési értéke String), akkor azt így kell megtennünk:
Kód (java) Kijelölés

String test = new MyClass().stringMethod(); // A stringMethod() visszatérési értéke String

VAGY
Kód (java) Kijelölés

MyClass cl = new MyClass();
String test = cl.stringMethod(); // A stringMethod() visszatérési értéke String


Negyedik, egyben utolsó lépés: Bevezetjük a Properties osztályunk változóját.
Kód (java) Kijelölés

Properties p = new Properties();


Mindenek előtt ellenőriznünk kell, hogy a fájl, amit olvasni szeretnénk létezik-e. Ezt egy egyszerű if-fel megtehetjük.
Kód (java) Kijelölés

if(f.exists()){...}

Ha nagyon szeretnénk valamit kiírni, ha esetleg nem létezik a fájl, akkor azt egy else záradékkal megtehetjük.

Ha létezik a fájl, akkor lejjebb lépünk egy szintet, mégpedig egy try-catch blokkba. Ez azért fontos, mert a p.load függvényünk később Exception-t okozhat, amit kezelnünk kell.

Tehát a folytatás:
Kód (java) Kijelölés

try{
p.load(new FileInputStream(f));

MyVariable = p.getProperty("MyVariable");

System.out.println(MyVariable);
} catch(Exception ex){
ex.printStackTrace();
}


A Properties osztály load metódusa megnyit egy InputStream-et, amelyen keresztül olvashatóvá válik a fájlunk.
Mindezek után már a getProperty metódus visszatér a megfelelő String értékkel, ha paraméternek jó adatot adtunk meg.

Ilyen egyszerű is lenne egy konfigurációs fájl olvasása.

Módosításáról később, egy egyszerű függvény bemutatásával fogok példát adni.

Köszönöm szépen a figyelmet és érdeklődést.

Szilárd
Java / C# / Swift Programmer

Apple
----------
OS X / iOS User
iPhone 6 Plus
iPad Air 2
MacBook Pro 13" Retina

Szilárd

Üdvözlök mindenkit ismét!

Egy kis kommentár, amit az előző posztomban elfelejtettem említeni: Ezek a leírások nem a teljesen kezdő programozóknak szólnak.

Térjünk is a lényegre akkor, ha ezt letudtuk.

A konfigurációs fájl módosítása rendkívül egyszerű, hiszen egy sima FileWriterrel megoldható az egész.
Ez a függvény nem kizárólag konfigurációs fájlokra húzható fel, hanem bármilyenre, amiben egy meglévő szövegrészt módosítani szeretnénk.

Maga a függvény így néz ki:
Kód (java) Kijelölés

public void updateConfiguration(File file,String field,Object old_val,Object new_val) throws Exception{
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "", oldProperty = "";

while((line = reader.readLine()) != null){
oldProperty += line + "\r\n";
}

String rewritedProperty = oldProperty.replaceAll(field+"="+old_val,field+"="+new_val);
FileWriter writer = new FileWriter(file);
writer.write(rewritedProperty);
writer.close();
}


A metódus eldob minden féle exceptiont, szóval ezt később a meghívásakor kezelnünk kell. (try-catch)
Magát a fő funkciót a FileWriter végzi el, ami az oldProperty azon sorát cseréli le, amelyben szerepel a field=old_val.
Ha például paramétereink így néznek ki:
Kód (java) Kijelölés

updateConfiguration(new File("conf.ini"),"MyVariable","Apple","Pear");

Akkor a függvény lecseréli a
Kód (ini) Kijelölés

MyVariable=Apple

sort
Kód (ini) Kijelölés

MyVariable=Pear

erre.

Az oldProperty stringben tehát replacelve lesz a field=old_val -> field=new_val-ra.
Később pedig a rewritedProperty Stringet hozzáadjuk a fájlunkhoz. Felülírja azt a sort, amit módosítottunk.

Remélem érthető kis leírásra sikeredett.

Köszönöm a figyelmet és érdeklődést!

Szilárd
Java / C# / Swift Programmer

Apple
----------
OS X / iOS User
iPhone 6 Plus
iPad Air 2
MacBook Pro 13" Retina

Powered by EzPortal