Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Java - Ukládání/načtení datových typů do Windows registru

Dost často se zde na ITnetworku i na jiných fórech řeší problém jak zajistit po spuštění programu opět určitá nastavení provedená v předchozím spuštěním. Lze to samozřejmě několika způsoby. Uložení do souboru přes znakové nebo bajtové proudy (např. *.txt, *.bin, apod.) nebo přes parsery do konfiguračních *.xml souborů, případně nám Java umožňuje daná data schovat i do Windows registrů. A protože je Java multiplatformní, měla by umožňovat tuto techniku i na ostatních OS. Pro používání není potřeba žádný framework, daná technika je součástí API Java SE 4 a vyšší.

Ve Windows se jedná o ty známe registry, ke kterým se dostaneme v příkazem regedit.exe. Java API nám umožňuje ukládat do dvou klíčů v registrech. Klíčem je objekt Preferences, který je v Java API. Samotná technologie má dispozici i vlastní dokumentaci a popis použití nacházející se v Oracle Documents

  • HKEY_CURRENT_USER - Klíč se nachází v cestě HKEY_CURRENT_U­SER\SOFTWARE\Ja­vaSoft\Prefs\
  • HKEY_LOCAL_MAC­HINE - Klíč se nachází v cestě HKEY_LOCAL_MAC­HINE\SOFTWARE\Ja­vaSoft\Prefs\

Samotné používání registrů zde nebudeme rozebírat a taktéž ani jejich pravidla využití (např. různí uživatelé, práva přístupu k registru apod.. ). A abychom nebyli za "rasisty", danou programovací techniku lze úspěšně využít i na alternativních operačních systémech, tedy dle stackoverflow. Ovšem ukládání do tzv. registrů na Linuxu, Unix, Solaris, MacOS nemám ověřen.

Na Unix/Linuxu je cesta k ukládání pro SystemRoot "/etc/.java" a pro UserRoot "${user.home}/­.java/.userPref­s" .
V případě MacOS by se uložené data měly nacházet /Users/"Uživa­tel"/Library/Pre­ferences/

Přístup k SystemRoot (HKEY_LOCAL_MAC­HINE)

Preferences.systemRoot()

Přístup k UserRoot (HKEY_CURRENT_U­SER)

Preferences.userRoot()

Příklad k vytvoření uzlu

Předvedeme si jak se s takovým objektem Preferences pracuje. V tomto prvním příkladě si vytvoříme nový uzel v registrech pro oblast HKEY_CURRENT_U­SER. Pokud by uzel už existoval, tak se nevytvoří a inicializace objektu Preferences nás připojí na úroveň v registrech definovanou v našem programu.

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");
    }
}

Spusťte si registry a uvidíte, že vznikl nový uzel MujUzelDevbook v registrech na cestě HKEY_CURRENT_U­SER\SOFTWARE\Ja­vaSoft\Prefs\/Muj/U­zel/Devbook .

Vytvoření uzlu v registru v Javě - Soubory v Javě

Uložení dat do klíčů

Objekt Preferences umožňuje pouze uložení několik datových typů (např. String, boolean, pole byte, ..). V uvedeném příkladu si předvedeme jak snadno se dané hodnoty dají do registru uložit. Každý datový typ má v API svou metodu, u které je první parametr identifikátor klíče a druhý parametr 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ý příklad se uloží do uzlu HKEY_CURRENT_U­SER\SOFTWARE\Ja­vaSoft\Prefs\/Pri­klad2 .Vznikne celkem 6 klíčů.

Uložení dat do registrů Windows v Javě - Soubory v Javě

Načtení z klíčů

Uložení dat do registrů jsme si předvedli, tak nás logicky čeká varianta jak ta data z registrů zas získat do našeho programu. Objekt Preferences opět disponuje metodami, které dané datové typy načtou. Návratový typ definovaných metod je náš datový typ (informace načtená) z registrů. První parametr je jméno klíče a druhý parametr hodnota datového typu v případě neexistence daného klíče (viz. načtení klíče "klicSS", který v registrech neexistuje). Pokud tedy klíč neexistuje v daném uzlu, návratovým typem se stane druhý parametr v dané metodě.

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čtení dat z registru Windows v Javě - Soubory v Javě

Práce s úrovňovými uzly

V poslední části předvedeme vytváření uzlu v uzlech, výpis klíčů v definovaném uzlu a pak pár metod, které vypíší informace o cestě k uzlu, předka uzlu a informace k uzlu.

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");
    }
}
Hierarchie uzlů registru Windows v Javě - Soubory v Javě

Jak vidíte, Java API vám umožňuje ukládat i načítat data z registrů. Zároveň umožňuje pracovat ve víceúrovňových uzlech, přecházet mezi nimi apod.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 477x (6.8 kB)

 

Všechny články v sekci
Soubory v Javě
Článek pro vás napsal Robert Michalovič
Avatar
Uživatelské hodnocení:
1 hlasů
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