Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde

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

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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/

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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ě

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ě

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ě

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ě

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ženo 193x (6.8 kB)

 

 

Článek pro vás napsal Robert Michalovič
Avatar
Jak se ti líbí článek?
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
Předchozí článek
Přehrávání zvuků (soubory wav) v Javě
Všechny články v sekci
Práce se soubory v Javě
Aktivity (3)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!