Soubory vlastností, property files

Soubory vlastností, property files

  • Textové soubory formátu: řádek = záznam

  • Každý záznam má podobu: klíč=hodnota

  • Jsou to texty, je jen na nás, jak hodnotu interpretujeme.

iconSize=24
iconImg=myico.png
iconTitle=My icon

Příklad použití

import java.util.Properties;
...
Properties iconProps = new Properties();
iconProps.loadFromXML(new FileInputStream("iconProps.properties"));
int size = Integer.parseInt(iconProps.getProperty("iconSize"));

Konfigurace aplikace pomocí Properties ?

  • Chceme Properties pro nastavení/konfiguraci aplikace?

  • Možná jsou lepší alternativou java.util.prefs:

  • java.util.prefs.Preferences

  • Podobný princip jako "systémové registry" ve Windows nebo soubory .rc v Linuxu

  • Konfigurace specifická pro celý systém (=všechny uživatele dané aplikace)

  • Konfigurace specifická pro jednoho uživatele dané aplikace

Kódování souborů vlastností

  • V předchozích verzích se pro načítání balíčků prostředků vlastností používalo kódování ISO-8859-1 (=ISO Latin 1).

  • Je OK pro západní abecedy.

  • Již pro evropské východní nevyhovuje, pro asijské vůbec.

Soubory vlastností UTF-8 od Java 9

  • V Javě SE 9 se soubory vlastností načítají v kódování UTF-8.

  • UTF-8 je mnohem pohodlnější způsob reprezentace nelatinkových znaků.

  • Načítač umí dokonce rozpoznat, kdy jsou v souboru .properties non-UTF-8 znaky, čili jedná se o starý formát ISO-Latin-1. Pak to načte opakovaně správně.

Kompatibilita

  • Většina stávajících souborů vlastností by neměla být ovlivněna

  • UTF-8 a ISO-8859-1 mají stejné kódování pro znaky ASCII.

  • Lidsky čitelné ne-ASCII kódování ISO-8859-1 není platné UTF-8.

  • Pokud je zjištěna neplatná posloupnost bajtů UTF-8, běhové prostředí Javy automaticky znovu načte soubor v kódování ISO-8859-1.

Pokud se vyskytne problém, zvažte následující možnosti:

  • Převeďte soubor vlastností do kódování UTF-8.

  • Zadejte systémovou vlastnost runtime pro kódování souboru vlastností, jako v tomto příkladu:

    java.util.PropertyResourceBundle.encoding=ISO-8859-1