IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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_MAC­HINE - 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_MAC­HINE)

Preferences.systemRoot()

Prístup k UserRoot (HKEY_CURRENT_U­SER)

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_U­SER. 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.

Vytvorenie uzla v registri v Jave - Práca so súbormi v Jave

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.

Uloženie dát do registrov Windows v Jave - Práca so súbormi v Jave

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");
    }
}
Načítanie dát z registra Windows v Jave - Práca so súbormi v Jave

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");
    }
}
Hierarchia uzlov registra Windows v Jave - Práca so súbormi v Jave

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 podmienkami

Stiahnuté 523x (6.8 kB)

 

Všetky články v sekcii
Práca so súbormi v Jave
Článok pre vás napísal Robert Michalovič
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Aktivity