Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

5. diel - Uloženie objektov do CSV v Jave - Dokončenie

V minulej lekcii, Uloženie objektov do CSV v Jave, sme si vytvorili formulárovú aplikáciu s databázou používateľov, ktorá ukladá inštancie do textových súborov vo formáte CSV.

V dnešnom Java tutoriáli implementujeme do našej objektovej formulárovej aplikácie načítanie užívateľov z textového súboru vo formáte CSV.

Trieda Database

Do triedy si pridáme metódu na načítanie užívateľov.

Metóda load()

Kód metódy je nasledujúci:

public void load() throws IOException {
    // first we empty the user list
    users.clear();
    try {
        // we go through all lines in the file, divide them into parts by semicolons
        // then we use the split parts to add a new user
        for (String line : Files.readAllLines(file)) {
            String[] values = line.split(";");
            addUser(values[0], Integer.parseInt(values[1]), LocalDate.parse(values[2]));
        }
    } catch (IOException ex) {
        JOptionPane.showMessageDialog(null, "The database could not be loaded, the file does not seem to exist.");
    }
}

Najprv kolekciu users vyprázdnime. Súbor file budeme čítať riadok po riadku v cykle. Každý riadok rozdelíme metódou split(), ktoré odovzdáme oddeľovač ;. Následne do kolekcie users pomocou metódy addUser() pridáme objekt s rozdelenými hodnotami.

Prezentačná vrstva aplikácie

Ako prvé si pripravíme nové formulárové prvky (komponenty z ToolBoxu). Tlačidlo Save už máme, pridáme tlačidlo Load pomenované loadJButton, ďalej komponentu JList pomenovanú userList.

Ďalej pridáme:

  • JTextField - pre zadanie mena nového užívateľa,
  • JSpinner - na zadanie veku užívateľa,
  • JTextField - na zadanie dátumu registrácie užívateľa.

Ku komponentom pridáme aj patričné popisné komponenty JLabel. Tieto prvky môžeme zoskupiť do panelu.

V ďalšom paneli budeme mať tri komponenty JLabel pre detail užívateľa:

  • nameJLabel,
  • ageJLabel,
  • a registeredJLabel.

Ďalšie tri komponenty JLabel pridáme ako ich popis. Nakoniec pridáme tlačidlo Add pomenované addJButton na pridanie užívateľa. Výsledný formulár vyzerá takto:

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

Metóda actionPerformed() tlačidla saveJButton

Z tlačidla Save odstránime vytvorenie testovacích užívateľov. Samotné uloženie teraz vložíme do trycatch bloku. Keďže naša databáza výnimky posiela pomocou throws ďalej, budeme na ne reagovať vo formulárovej časti. Po zachytení výnimky zobrazíme JOptionPane s chybou. Metóda tlačidla bude teda vyzerať takto:

saveJButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            database.save();
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, "Cannot save the database, verify your access privileges to the file.");
        }
    }
});

Upozornenie na chybu, teda komunikácia s užívateľom, priamo v triede Database by nebolo vhodné.

Metóda actionPerformed() tlačidla loadJButton

Podobne vytvoríme metódu tlačidla Load:

loadJButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            database.load();
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, "Cannot load from the database, verify your access privileges to the file.");
        }
    }
});

V reálnej aplikácii by sa načítanie vykonalo asi automaticky po spustení aplikácie a uložení po ukončení. Pre názornosť si to však ponecháme na tlačidlách.

Metóda valueChanged() zoznamu userList

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

userList.addListSelectionListener(new ListSelectionListener() {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        User user = (User)userList.getSelectedValue();
        if (user != null) {
            nameJLabel.setText(user.getName());
            ageJLabel.setText(String.valueOf(user.getAge()));
            registeredJLabel.setText(user.getRegistered().toString());
        }
    }
});

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

Metóda actionPerformed() tlačidla addJButton

Posledným tlačidlom je tlačidlo Add pre pridanie nového užívateľa:

addJButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        String name = nameJTextField.getText().replace(";", " ");
        int age = (int)ageJSpinner.getModel().getValue();
        LocalDate registered = LocalDate.parse(
                registeredJTextField.getText(),
                DateTimeFormatter.ofPattern("d'.'M'.'y"));
        database.addUser(name, age, registered);
    }
});

Keby nám užívateľ vložil do mena bodkočiarku, aplikáciu by nám rozbil. Preto voláme metódu replace(";", " "), ktorá nám tieto bodkočiarky vymení za medzery.

Prepojenie databázy s kolekciou userList

Prejdeme do konštruktora a pridáme nasledujúci riadok pod vytvorenie okna:

userList.setModel(database.getModel());

Testovanie

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 používateľov.

V nasledujúcom cvičení, Riešené úlohy k 1.-5. lekciu práce 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é 0x (7.83 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áce so súbormi v Jave
Článok pre vás napísal Petr Štechmüller
Avatar
Užívateľské hodnotenie:
1 hlasov
Autor se věnuje primárně programování v Javě, ale nebojí se ani webových technologií.
Aktivity