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

3. diel - Práca s textovými súbormi v Jave

V minulom dieli seriálu tutoriálov pre Javu sme si ukázali, ako fungujú prístupové práva v systémoch Windows. Najjednoduchšou cestou, ako uložiť dáta aplikácie na pevný disk, je využiť textové súbory. Sa súbory s príponou .txt ste sa iste všetci už stretli. Text je v nich uložený jednoducho na jednotlivých riadkoch. Na oddelenie riadkov sa využíva špeciálnych znakov, ktoré sú bohužiaľ špecifické pre každý operačný systém. Toto však za nás našťastie vyrieši Java.

Pozn .: V rôznych materiáloch sa môžete stretnúť s použitím rôznych tried a rôznych spôsobov na zápis do súborov. Budem sa tu snažiť ukazovať spôsobmi, ktoré sú najjednoduchšie a najnovšie.

Zápis textu do nového súboru

Najprv si poďme vytvoriť nový textový súbor a niečo do neho zapísať. Vytvorte si nový projekt s názvom TextoveSoubory. K zapisovanie do textových súborov nám Java poskytuje triedu BufferedWriter. Buffered znamená, že zapisovač využíva vyrovnávaciu pamäť, aby urýchlil zápis na disk.

Vytvorme blok try-with-resources a založme v ňom novú inštanciu BufferedWriteru. Ako už vieme z predchádzajúcich dielov, try-with-resources sa nám automaticky postará o zatvorenie súboru po dokončení zápisu / čítania. Do konstruktoru vložíme inštanciu FileWriteru, ktorý BufferedWriter obaľuje.

try (BufferedWriter bw = new BufferedWriter(new FileWriter("soubor.txt")))
{
}
catch (Exception e)
{
    System.err.println("Do souboru se nepovedlo zapsat.");
}

Za zmienku stojí použitie System.err v bloku catch, čo je chybový kanál pre výstup. V prípade, že sa zápis naozaj nepodarí, uvidíte tento text v konzole červenou farbou.

Náš BufferedWriter je teraz nasmerovaný na správny súbor. Nový riadok zapíšeme pomocou metódy write (). Odriadkovanie v súbore docielime metódou Newline (). Po dokončení zápise musíme zavolať metódu flush (), ktorá sa stará o vyprázdnenie bufferu. S tým sa tu nebudeme zaťažovať, postačí nám vedieť, že nami zapísané riadky môžu zostať chvíľu vo vyrovnávacej pamäti a my pomocou flush () vynútime ich zápis.

Kód sa nám teda rozrástol a môže vyzerať napr. Nasledovne:

try (BufferedWriter bw = new BufferedWriter(new FileWriter("soubor.txt")))
{
    bw.write("První řádek");
    bw.newLine();
    bw.write("Tento text je na druhém řádku");
    bw.newLine();
    bw.write("A do třetice.");
    bw.newLine();
    bw.flush();
}
catch (Exception e)
{
    System.err.println("Do souboru se nepovedlo zapsat.");
}

Po spustení sa vytvorí file.txt v zložke s naším projektom. Ako sa správne v Jave vysporiadať s cestou k súboru a právami sme si už ukazovali a tu to pre jednoduchosť zanedbáme. Vidíme, že súbor existuje a naozaj obsahuje náš text:

Zápis textových súborov v Jave - Práca so súbormi v Jave

Pripísanie textu do existujúceho súboru

Ak súbor neexistuje, kód vyššie ho vytvorí. Ak existuje, bude prepísaný. Toto správanie môžeme zmeniť pomocou 2. parametra konštruktory objektu FileWriter. Pokiaľ ho nastavíme na true, vykoná sa tzv. Append (pripísania). Takto do existujúceho súboru pripíšeme nový riadok:

try (BufferedWriter bw = new BufferedWriter(new FileWriter("soubor.txt", true)))
{
    bw.write("Připsaný řádek");
    bw.newLine();
    bw.flush();
}
catch (Exception e)
{
    System.err.println("Do souboru se nepovedlo zapsat.");
}

Ak súbor neexistuje, bude vytvorený. Ak existuje, bude do neho pripísané a jeho pôvodný obsah zostane.

Čítanie existujúceho súboru

Zostáva nám už len vedieť súbor načítať. Nie je to o nič zložitejšie, než zápis a opäť k tomu máme v Jave pripravenú triedu, konkrétne BufferedReader. Použitie je podobné, namiesto metódy write () použijeme readline (), ktorá vracia riadok textu zo súboru a zároveň sa presunie na riadok nasledujúci. Budeme ju teda volať vo while cyklu. Podmienka pre ošetrenie vyjdenie zo súboru je možná krkolomnejšie, kontrolujeme, či prebehlo priradenie nové riadky do premennej.

Kód k výpisu obsahu súboru do konzoly by vyzeral takto:

try (BufferedReader br = new BufferedReader(new FileReader("soubor.txt")))
{
    String s;
    while ((s = br.readLine()) != null)
    {
        System.out.println(s);
    }
}
catch (Exception e)
{
    System.err.println("Chyba při čtení ze souboru.");
}

Kód celého nášho programu vyzerá teraz asi takto:

// zápis do souboru
try (BufferedWriter bw = new BufferedWriter(new FileWriter("soubor.txt")))
{
    bw.write("První řádek");
    bw.newLine();
    bw.write("Tento text je na druhém řádku");
    bw.newLine();
    bw.write("A do třetice.");
    bw.newLine();
    bw.flush();
    System.out.println("Do souboru bylo zapsáno");
}
catch (Exception e)
{
    System.err.println("Do souboru se nepovedlo zapsat.");
}

// připsání textu do existujícího souboru
try (BufferedWriter bw = new BufferedWriter(new FileWriter("soubor.txt", true)))
{
    bw.write("Připsaný řádek");
    bw.newLine();
    bw.flush();
    System.out.println("Do souboru bylo připsáno");
}
catch (Exception e)
{
    System.err.println("Do souboru se nepovedlo zapsat.");
}

// výpis obsahu souboru
System.out.println("Vypisuji celý soubor:");
try (BufferedReader br = new BufferedReader(new FileReader("soubor.txt")))
{
    String s;
    while ((s = br.readLine()) != null)
    {
        System.out.println(s);
    }
}
catch (Exception e)
{
    System.err.println("Chyba při čtení ze souboru.");
}

A výsledok:

Zápis a čítanie textových súborov v Jave - Práca so súbormi v Jave

Nepodporili sme kontrolu práv. Do súborov tiež budeme chcieť väčšinou ukladať skôr objekty, než riadky textu. To si ukážeme ďalej, v lekcii Kvíz - Základy práce so súbormi a výnimkami v Jave .

V nasledujúcom kvíze, Kvíz - Základy práce so súbormi a výnimkami v Jave, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 863x (3.35 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Úvod do práce so súbormi v Jave
Všetky články v sekcii
Práca so súbormi v Jave
Preskočiť článok
(neodporúčame)
Kvíz - Základy práce so súbormi a výnimkami v Jave
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity