5. diel - Uloženie objektov do CSV v Jave - Dokončenie
V predchádzajúcej 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 tutoriáli Java 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(), ktorej 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 komponent JList pomenovaný
userList.
Ďalej pridáme:
JTextField- na 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 náležité 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:

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 bloku try –
catch. 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 necháme ako tlačidlá.
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 vybraný žiadny užívateľ (zoznam by bol prázdny).
Metóda
actionPerformed() tlačidla addJButton
Posledným tlačidlom je tlačidlo Add na 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 pod vytvorenie okna pridáme nasledujúci riadok:
userList.setModel(database.getModel());
Testovanie
Skúsime pridať nového používateľa:

Podobne by sme si mohli napísať aj mazanie používateľov.
V nasledujúcom cvičení, Riešené úlohy k 1.-5. lekcii 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é 48x (8.23 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java
