Java - Ukladanie / načítanie dátových typov do Windows registra
Dosť často sa tu na ITnetworku aj na iných fórach rieši problém ako zabezpečiť po spustení programu opäť určitá nastavenia vykonané v predchádzajúcom spustením. Možno to samozrejme niekoľkými spôsobmi. Uloženie do súboru cez posunkovej alebo bajtové prúdy (napr. * .Txt, * .bin, apod.) Alebo cez parser do konfiguračných * .xml súborov, prípadne nám Java umožňuje dané dáta schovať aj do Windows registrov. A pretože je Java multiplatformový, mala by umožňovať túto techniku aj na ostatných OS. Pre používanie nie je potrebný žiadny framework, daná technika je súčasťou API Java SE 4 a vyššie.
Vo Windows sa jedná o tie poznáme registre, ku ktorým sa dostaneme v príkazom regedit.exe. Java API nám umožňuje ukladať do dvoch kľúčov v registroch. Kľúčom je objekt Preferences, ktorý je v Java API. Samotná technológia má dispozícii aj vlastný dokumentáciu a popis použitia nachádzajúce sa v Oracle Documents
- HKEY_CURRENT_USER - Kľúč sa nachádza v ceste HKEY_CURRENT_USER \ SOFTWARE \ JavaSoftu \ Prefs \
- HKEY_LOCAL_MACHINE - Kľúč sa nachádza v ceste HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoftu \ Prefs \
Samotné používanie registrov tu nebudeme rozoberať a taktiež ani ich pravidlá využitie (napr. Rôzni užívatelia, práva prístupu k registru a pod ..). A aby sme neboli za "rasistov", danú programovací techniku možno úspešne využiť aj na alternatívnych operačných systémoch, teda podľa stackoverflow. Ovšem ukladania do tzv. Registrov na Linuxe, Unix, Solaris, MacOS nemám overený.
Na Unix / Linux je cesta na ukladanie pre SystemRoot
"/etc/.java" a pre UserRoot "$ {user.home} /. Java /
.userPrefs".
V prípade MacOS
by sa uložené dáta mali nachádzať / Users / "Užívateľ" / Library
/ Preferences /
Prístup k SystemRoot (HKEY_LOCAL_MACHINE)
Preferences.systemRoot()
Prístup k UserRoot (HKEY_CURRENT_USER)
Preferences.userRoot()
Príklad na vytvorenie uzla
Predvedieme si ako sa s takým objektom Preferences pracuje. V tomto prvom príklade si vytvoríme nový uzol v registroch pre oblasť HKEY_CURRENT_USER. Ak by uzol už existoval, tak sa nevytvorí a inicializácia objektu Preferences nás pripojí na úroveň v registroch definovanú v našom programe.
import java.util.prefs.Preferences; public class VytvoreniUzlu { @SuppressWarnings("unused") private static Preferences prefs; public static void main(String[] args) { System.out.println("Start Programu"); // vytvori uzel prefs = Preferences.userRoot().node("MujUzelDevbook"); System.out.println("Konec Programu"); } }
Spustite si registre a uvidíte, že vznikol nový uzol MujUzelDevbook v registroch na ceste HKEY_CURRENT_USER \ SOFTWARE \ JavaSoftu \ Prefs \ / Muj / Uzol / Devbook.
Uloženie dát do kľúčov
Objekt Preferences umožňuje iba uloženie niekoľko dátových typov (napr. String, boolean, pole byte, ..). V uvedenom príklade si predvedieme ako ľahko sa dané hodnoty dajú do registra uložiť. Každý dátový typ má v API svoju metódu, u ktorej je prvý parameter identifikátor kľúča a druhý parameter samotná hodnota.
import java.util.prefs.Preferences; public class UlozeníDat { private static Preferences prefs; public static void main(String[] args) { System.out.println("Start Programu"); // vytvori/napojí se na uzel prefs = Preferences.userRoot().node("Priklad2"); // ulozime udaje String string = "Ulozime String do registrů"; prefs.put("klicString",string); prefs.putBoolean("klicBoolean",true); prefs.putDouble("klicDouble",3.5646d); prefs.putFloat("klicFloat",45646.234654f); prefs.putInt("klicInt", 215646); prefs.putLong("klicLong",1846546465); System.out.println("Konec Programu"); } }
Daný príklad sa uloží do uzla HKEY_CURRENT_USER \ SOFTWARE \ JavaSoftu \ Prefs \ / Priklad2.Vznikne celkom 6 kľúčov.
Načítanie z kľúčov
Uloženie dát do registrov sme si predviedli, tak nás logicky čaká varianta ako tie dáta z registrov zas získať do nášho programu. Objekt Preferences opäť disponuje metódami, ktoré dané dátové typy načítajú. Návratový typ definovaných metód je náš dátový typ (informácie načítané) z registrov. Prvý parameter je meno kľúče a druhý parameter hodnota dátového typu v prípade neexistencie daného kľúča (viď. Načítanie kľúča "klicSS", ktorý v registroch neexistuje). Ak teda kľúč neexistuje v danom uzle, návratovým typom sa stane druhý parameter v danej metóde.
import java.util.prefs.Preferences; public class NacteniDat { private static Preferences prefs; public static void main(String[] args) { System.out.println("Start Programu"); // vytvori uzel prefs = Preferences.userRoot().node("Priklad2"); // nacteme data z registru String string = null; string = prefs.get("klicString",string); System.out.println("Zde jsou data typu String : "+string); System.out.println("Zde jsou data typu Double : "+prefs.getDouble("klicDouble", 0d)); System.out.println("Zde jsou data typu Float : "+prefs.getFloat("klicFloat",0f)); System.out.println("Zde jsou data typu Int : "+prefs.getInt("klicInt", 0)); System.out.println("Zde jsou data typu Long : "+prefs.getLong("klicLong", 0L)); System.out.println("Zde jsou data typu Boolean : "+prefs.getBoolean("klicBoolean",false)); System.out.println("Zde jsou data typu String u kterych neexistuje klic : "+prefs.get("klicSS","Neni hodnota")); System.out.println("Konec Programu"); } }
Práca s úrovňovým uzlami
V poslednej časti predvedieme vytváranie uzla v uzloch, výpis kľúčov v definovanom uzla a potom pár metód, ktoré vypíšu informácie o ceste k uzla, predka uzla a informácie k uzla.
import java.util.prefs.*; public class HiearchiUzlu { private static Preferences prefs; @SuppressWarnings("static-access") public static void main(String[] args) throws BackingStoreException { System.out.println("Start Programu"); prefs = Preferences.userRoot().node("Program2"); System.out.println("Vypis nazvu uzlu : " + prefs.absolutePath()); System.out.println("Vypis predka uzlu : " + prefs.parent()); System.out.println("Vypis informace uzlu : " + prefs.systemRoot()); prefs = null; prefs = Preferences.userRoot().node("Uzel1").node("Uzel2").node("Uzel3"); System.out.println("Vypis nazvu uzlu : " + prefs.absolutePath()); System.out.println("Vypis predka uzlu : " + prefs.parent()); System.out.println("Vypis informace uzlu : " + prefs.systemRoot()); // ulozime klice a hodnoty prefs.put("Klic1", "Hodnota1"); prefs.put("Klic2", "Hodnota2"); // vypiseme klice String[] klice = prefs.keys(); for (String s : klice) { System.out.println("Klic : " + s); } System.out.println("Konec Programu"); } }
Ako vidíte, Java API vám umožňuje ukladať aj prevziať údaje z registrov. Zároveň umožňuje pracovať vo viacúrovňových uzloch, prechádzať medzi nimi a pod.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 523x (6.8 kB)