Szerző Téma: Konfigurációs fájlok módosítása / olvasása Java programunkkal.  (Megtekintve 2038 alkalommal)

Nem elérhető Szilárd

  • Emulation Expert
  • Elvetemült
  • *****
  • Hozzászólások: 660
  • Java / C# / Swift Developer
  • Op. Rendszer: OS X / iOS
Ü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
« Utoljára szerkesztve: 2013 Január 05, 03:26:37 pm írta Szilárd »
Java / C# / Swift Programmer

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

Nem elérhető Szilárd

  • Emulation Expert
  • Elvetemült
  • *****
  • Hozzászólások: 660
  • Java / C# / Swift Developer
  • Op. Rendszer: OS X / iOS
Re:Konfigurációs fájlok módosítása / olvasása Java programunkkal.
« Válasz #1 Dátum: 2013 Január 05, 03:26:43 pm »
Ü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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29