INI soubory v Javě - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Java

INI soubory v Javě

java

17. dubna 2002, 00.00 | V minulosti jeden stěžejních souborů pod Windows. V současné době je převálcovaly registry. Existuje však oblast, ve které jsou stále vítané.

Úvodem: Vím, že označení INI soubor pro to, co zde budu popisovat asi není přesné, ale zdá se mi to jako nejbližší přirovnání. Proto mne omluvte.

V minulosti jeden stěžejních souborů pod Windows. V současné době je převálcovaly registry, přesto existuje oblast, ve které jsou stále vítané. Onou oblastí může být Java.

Právě proto, že Java není vázána pouze na tuto platformu, není schopná ukládat svoje data do registrů. Což je i logické, protože na jiných systémech vůbec takovéto registry nejsou. Do popředí nám tu zde tedy povstávají INI soubory. Je nutno si přiznat, že INI soubor, vytvořený javáckou aplikací se v pár ohledech odlišuje, oproti tomu co znáte z Windows.

Ten základní rozdíl je v tom, že tento soubor má uložené jednotlivé klíče s daty v sekcích tj. např.:

[Document]
Version=1.0.0.5
Author=...

Tato nová vlastnost by se z počátku mohla zdát jako překážka. Obzvláště používáme-li několik sekcí se stejnými klíči. Ale při podrobnějším prozkoumání zjistíme, že to zase až tak velká překážka není. Není totiž nic jednoduššího než před každý klíč vložit název sekce. Výsledně to tedy může vypadat takto:

Document.Version=1.0.0.5
Document.Author=...

Z předcházejícího je ovšem jasné, že tímto způsobem sice docílíte dobré čitelnosti, ale INI soubor se tak může dosti zvětšit. Možná, že postupem času si zvyknete na to, vytvářet rovnou unikátní názvy. To ale často není možné u automatizovaných metod, které např. ukládají nějaké vlastnosti stejných objektů, zde se právě hodí ten předchozí přístup. Nic vám ovšem nebrání v tom, abyste si je upravili podle své libosti.

Další rozdíl v INI souborech Windows a Javy se nachází v kódování. Javácké INI soubory jsou standardně psány v ASCII. To krásně vyhovuje pro angličtinu, avšak pro jiné jazyky jako je např. čeština je to nevhodné. A přičteme-li k tomu, že se Java nachází na množství jiných operačních systémů, pak nám z toho logicky vyplívá, že zde bude nějaké standardní kódování. Ano, oním kódováním je Unicode, do kterého se právě převádějí všechny znaky, které nejsou v ASCII. V textu to vypadá následovně.

Znaky jako \, tab, newline, a carriage return jsou zapisovány jako \\, \t, \n, a \r. Taktéž jsou zapisovány znaky #, !, =, : — aby nemohla nastat chyby při čtení. Mimoto znaky menší než 20h resp. větší než 7Eh jsou zapisovaný Unicodeovým zápisem tj. \uXXXX, kde XXXX je hexadecimální hodnota znaku.

Toto vše je sice dobré vědět, už jen pro případ, že budete potřebovat nějaký soubor přečíst či ručně napsat. Ovšem v programu nás to moc zajímat nebude, protože vše by se mělo odehrávat bez našeho vědomí.

Konkrétně

Nejdříve se podíváme na to, jak nějaký INI soubor vytvořit. Je to vcelku jednoduché vytvoříte si objekt třídy Properities a do něj se pak pomocí metody setProperty vkládají jednotlivé klíče s jejich hodnotami1. Takto naplnění objekt se pak uloží do objektu třídy FileOutputStream. Navíc můžete přidat komentář, které se následně ve vytvořeném souboru objeví jako řádka začínající #.

soubor SaveIni.java
import  java.util.*;
import  java.io.*;

public  class  SaveIni
{
     private  static  iniFile = "new.ini";

     public  static  void  main(String  args[])
     {
          System.out.println("Saving to file: " +iniFile);

          Properties myProps = new  Properties();
          myProps.setProperty("First", "1st");
          myProps.setProperty("Second", "2nd");

          FileOutputStream out = null;
          try  {
               out = new  FileOutputStream(iniFile, true);
               myProps.store(out, "This is a comment");
               out.close();
          }
          catch  (IOException ioe) {
               System.err.println("Problem processing file " + iniFile);
          }
     } // main
}

Tento příkládek vytvoří soubor new.ini a vněm bude komentář + dva klíče s hodnotami.

Nyní si můžeme ukázat, jak takovýto soubor číst. Celý postup zůstává téměř nezměněn, až na to, že budeme používat FileInputStream místo FileOutputStream, metodu load místo store a metodu get místo setProperty. Příkládek, pak může vypadat takto:

soubor ReadIni.java
import  java.util.*;
import  java.io.*;

public  class  ReadIni
{
     public  static  void  main(String  args[])
     {
          if  (args.length != 1) {
               System.err.println("Ini filename required!");
               return  ;
          }
          System.out.println("Loading file: " +args[0]);
          FileInputStream fis = null;
          try  {
               fis = new  FileInputStream(args[0]);
               Properties prop = new  Properties();
               prop.load(fis);
               fis.close();
/* Display the contents of the properties file */
               prop.list(System.out);
/* Display a specific key's value */
               System.out.println("\n" + prop.get("userid"));
          }
          catch  (FileNotFoundException fnfe) {
               System.err.println("The file " + args[0] + "was not found!");
          }
          catch  (IOException ioe) {
               System.err.println("Problem loading file " + args[0]);
          }
     } // main
}

Tento class je nutno spustit s parametrem INI souboru, který chcete nechat zobrazit.

Myslím si, že jako názorný příklad by to mohlo stačit. Nějaké důmyslnější použití resp. implementace je už jen na vás. Zde zmíněné příklady si můžete stahnout v archivu inifile.zip.


1. – Při vložení stejného klíče se samozřejmě stará hodnota přepisuje novou.

Tématické zařazení:

 » Rubriky  » Java  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: