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

5. diel - Uloženie objektov do CSV v Jave časť 2

V minulej lekcii, Uloženie objektov do CSV v Jave , sme načal databázu užívateľov pomocou CSV súborov. Teraz aplikáciu dokončíme a doladíme.

Načítanie používateľov z CSV súboru

Uloženie nám funguje, zostáva vedieť dáta opätovne načítať. Súbor budeme čítať riadok po riadku, každý riadok rozdelíme metódou split() a následne do kolekcie pridáme objekt s príslušnými hodnotami. Pred načítaním si kolekciu vyprázdnime, aby v nej neboli aj užívatelia načítanie niekedy skôr (keby sa aplikácia niekedy rozširovala).

public void nacti() throws IOException {
    uzivatele.clear();
    // Otevře soubor pro čteni
    try (BufferedReader br = new BufferedReader(new FileReader(soubor))) {
        String s;
        // Čteme řádek po řádku
        while ((s = br.readLine()) != null) {
            // Rozdělí řetězec řádku podle středníků
            String[] rozdeleno = s.split(";");
            String jmeno = rozdeleno[0];
            int vek = Integer.parseInt(rozdeleno[1]);
            LocalDate registrovan = LocalDate.parse(rozdeleno[2]);
            // Přidá uživatele s danými hodnotami
            pridejUzivatele(jmeno, vek, registrovan);
        }
    }
}

Trieda databázy je teda kompletná. Teraz sa zameriame na formulárovom časť.

Prezentačná vrstva aplikácie

Ako prvý si pripravíme nové formulárové prvky (komponenty z ToolBox). Pridáme tlačidlo načítať, ďalej JList listUzivatelu. V Properties prepneme do záložky Code a nastavíme Type Parametters na <User>. Ďalej JTextField na meno nového používateľa, JSpinner na jeho vek a JFormattedTextField na dátum registrácie. Ku komponentom pridáme aj nejaké labely. Tieto prvky môžeme zoskupiť do panelu. V ďalšom paneli budú 3 labely na detail užívateľa, tie pomenujeme jmenoJLabel, vekJLabel a registrovanJLabel. Ďalšie 3 labely pridáme ako ich popisok. Nakoniec pridáme tlačidlo na pridanie používateľa. Ak to bolo moc rýchle, nezúfajte, tu je obrázok výsledného formulára:

Formulár databázy používateľov v CSV - Práca so súbormi v Jave

V reáli by bolo pridanie používateľov pravdepodobne prítomné v ďalšom formulári, ktorý by sa zobrazoval ako dialóg, ale nám to bude v tutoriálu stačiť takto.

Z tlačidla "Uložiť" odstránime vytvorenie testovacích používateľov. Samotné uloženie teraz vložíme do try - catch bloku. Vieme totiž, že finally (teda TWR blok v našej databáze) výnimky nepohlcuje, čo tiež chceme a budeme na ne reagovať vo formulárové časti, kam reakcie logicky patrí. Upozornenie na chybu, teda komunikácia s užívateľom, priamo v triede Databaze by bolo zle. Po zachytení výnimky zobrazíme JOptionPane s chybou. Metóda tlačidla bude teda vyzerať takto:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        databaze.uloz();
    } catch (IOException ex) {
        JOptionPane.showMessageDialog(null, "Databázi se nepodařilo uložit, zkontrolujte přístupová práva k souboru.");
    }
}

Obdobne naklikne metódu tlačidla "Načítať". V reáli by sa načítanie vykonalo asi automaticky po spustení aplikácie a uloženie po ukončení, pre názornosť si to však ponecháme na tlačidlách. Metóda tlačidla "Načítať" teda vyzerá takto:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        databaze.nacti();
    } catch (IOException ex) {
        JOptionPane.showMessageDialog(null, "Databázi se nepodařilo načíst, soubor zřejmě neexisituje.");
    }
}

Teraz spracujeme kliknutie na listUzivatelu, ktoré vykoná zobrazenie detailu užívateľa do pripravených labelov:

private void listUzivateluValueChanged(javax.swing.event.ListSelectionEvent evt) {
    Uzivatel uzivatel = listUzivatelu.getSelectedValue();
    if (uzivatel != null) {
        jmenoJLabel.setText(uzivatel.getJmeno());
        vekJLabel.setText(String.valueOf(uzivatel.getVek()));
        registrovanJLabel.setText(uzivatel.getRegistrovan().toString());
    }
}

Kód sme opodmínkovali pre prípad, že by nebol žiadny užívateľ vybraný (list by bol prázdny).

Posledné tlačidlo bez metódy je Pridanie nového používateľa. Rozkliknite ho teda, vloženie bude veľmi jednoduché. Stačí užívateľa pridať do databázy a tá sa o všetko postará:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
    String jmeno = jmenoJTextField.getText();
    int vek = (int) vekJSpinner.getModel().getValue();
    LocalDate registrovan = LocalDate.parse(
            registrovanJFormattedTextField.getText(),
            DateTimeFormatter.ofPattern("d'.'M'.'y"));
    databaze.pridejUzivatele(jmeno, vek, registrovan);
}

Skúsime pridať nového používateľa:

Formulár databázy používateľov v CSV - Práca so súbormi v Jave

Podobne by sme si mohli napísať aj mazanie užívateľov, ale to už nechám na vás.

Teraz musíme databázu nabindovať na list používateľov, aby sa s každou zmenou databázy aktualizoval. To urobíme dodaním nasledujúce riadky do konstruktoru MainJFrame:

listUzivatelu.setModel(databaze.getModel());

Naša aplikácia je takmer hotová, ešte sa zamyslíme nad tým, čo sa stane, keď niekto do mena vloží bodkočiarka. Aplikácia sa rozbije. Preto budeme v metóde uloz() bodkočiarkami z mena odstraňovať. Keby sme robili aplikáciu, kde by sme ich potrebovali (čo sa nestáva príliš často), môžeme vybrať iný zástupný znak. Ak by sme chceli byť dokonalí, vložíme takú hodnotu sa bodkočiarkou do úvodzoviek. Potom sa však už nejde o jednoduché CSV a metóda split() nám prestane stačiť. Ďalej by sa to samozrejme dalo riešiť iným formátom. My si teda bodkočiarkami iba odstráňme, presnejšie ich nahradíme medzerami zmenou jediného riadku v metóde uloz():

String[] hodnoty = {u.getJmeno().replace(";", " "), String.valueOf(u.getVek()), u.getRegistrovan().toString()};

A sme hotoví. Ak vám niečo nešlo úplne hladko, hotový projekt máte ako vždy v prílohe aj so zdrojovým kódom. V budúcej lekcii, Riešené úlohy k 1.-5. lekciu práca so súbormi v Jave , sa pozrieme na formát XML.

V nasledujúcom cvičení, Riešené úlohy k 1.-5. lekciu práca so súbormi v Jave, si precvičíme 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é 160x (9.47 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Uloženie objektov do CSV v Jave
Všetky články v sekcii
Práca so súbormi v Jave
Preskočiť článok
(neodporúčame)
Riešené úlohy k 1.-5. lekciu práca so súbormi v Jave
Článok pre vás napísal Petr Štechmüller
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje primárně programování v Javě, ale nebojí se ani webových technologií.
Aktivity