Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

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

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

ONEbit hosting 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á pro SystémRoot "/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ě

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 94x (6.8 kB)

 

 

Článek pro vás napsal Robert Michalovič
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovi%C4%8D-8a9b9498
Miniatura
Všechny články v sekci
Práce se soubory v Javě
Aktivity (2)

 

 

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í!