1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se požaduje výstup zpracovaných informací do souborů na paměťová média. 1.2. Teorie Před cvičením se požaduje aby studenti se seznámili s třídami: File, FileWriter, FileReader, BufferedReader. A též s výjimkami: FileNotFoundException, IOException 1.3. Ukázkové úlohy 1.3.1. Úloha 1 Zadání úlohy Vypracujte podle postupu řešení požadovanou aplikaci práce se soubory Postup řešení: 1. Načtěte celá čísla z textového souboru 2. Načtená čísla uložte do jednorozměrného pole 3. Načtená čísla vypište na obrazovku 4. K číslům v poli přičtěte zadané celé číslo 5. Upravená čísla uložte do textového souboru Řešení úlohy Výpis 1.1. package ipalpcv12vzorova; import java.io.bufferedreader; import java.io.file; import java.io.filenotfoundexception; import java.io.filereader; import java.io.filewriter; import java.io.ioexception; 1
public class Cisla { private int[] cisla; private int pocetcisel = 0; private static int MAX_CISEL = 100; public Cisla() { cisla = new int[max_cisel]; public boolean ulozdosouboru(string nazevsouboru) { boolean File soubor = new File(nazevSouboru); try { FileWriter writer = new FileWriter(soubor); if (i <= (pocetcisel - 2)) { writer.write(cisla[i] + ", "); else { writer.write(cisla[i] + ""); writer.close(); vysledek = true; catch (IOException ex) { return vysledek; public boolean nactizesouboru(string nazevsouboru) { boolean File soubor = new File(nazevSouboru); try { BufferedReader reader = new BufferedReader(new FileReader(soubor)); String radek = reader.readline(); while (radek!= null) { String[] prvkyradku = radek.split(","); for (int i = 0; i < prvkyradku.length; i++) { prvkyradku[i] = prvkyradku[i].trim(); cisla[pocetcisel] = Integer.parseInt(prvkyRadku[i]); pocetcisel++; radek = reader.readline(); reader.close(); vysledek = true; catch (FileNotFoundException ex) { catch (IOException ex) { return vysledek; public void pricticislo(int cislo) { 2
cisla[i] += cislo; @Override public String tostring() { String text = ""; if (i <= (pocetcisel - 2)) { text += cisla[i] + ", "; else { text += cisla[i]; return text; Výpis 1.2. package ipalpcv12vzorova; public class CislaMain { public static void main(string[] args) { Cisla cisla = new Cisla(); if (cisla.nactizesouboru("cislavstup.txt")) { System.out.println("Cisla po nacteni ze souboru:"); System.out.println(cisla); System.out.println(""); int pricticislo = 5; cisla.pricticislo(pricticislo); System.out.println("Cisla po pricteni cisla " + pricticislo); System.out.println(cisla); System.out.println(""); if (cisla.ulozdosouboru("cislavystup.txt")) { System.out.println("Soubor byl uspesne ulozen"); else { System.out.println("Soubor se nepodarilo ulozit"); else { System.out.println("Soubor se nepodarilo nacist"); 3
1.4. Úlohy k řešení 1.4.1. Zadání úlohy 1 Podle komentářů ve zdrojových souborech kostry řešení doplňte těla metod 1.4.2. Kostra pro řešení Výpis 1.3. package cviceni12.povinna; public class PoznamkovyBlok { private String[] poznamky; private static int MAX_POZNAMEK = 1000; private int pocetulozenychpoznamek = 0; public PoznamkovyBlok() { poznamky = new String[MAX_POZNAMEK]; public int getpocetulozenychpoznamek() { return pocetulozenychpoznamek; * Provede pridani poznamky do poznamkoveho bloku * * @param poznamka vkladana poznamka do poznamkoveho bloku public void pridejpoznamku(string poznamka) { * Provede odebrani poznamky z poznamkoveho bloku, * cislo poznamky zada uzivatel v danem intervalu * * @param cislopoznamky z intervalu <1, MAX_POZNAMEK> public void odeberpoznamku(int cislopoznamky) { * Slouzi pro posun o jednu poznamku vlevo pri odebirani poznamky * z poznamkoveho bloku private void presunpoznamkyvlevo(int pocindex) { * Metoda ulozi vsechny poznamky do souboru s nazvem, ktery zada uzivatel * @param nazevsouboru nazev souboru, do nejz budou poznamky ulozeny 4
public void ulozpoznamkydosouboru(string nazevsouboru) { * Metoda nacte vsechny poznamky ze souboru s nazvem, ktery zada uzivatel * @param nazevsouboru nazev souboru, z nejz budou poznamky nacteny public void nactipoznamkyzesouboru(string nazevsouboru) { @Override public String tostring() { String text = ""; text += "Pocet ulozenych poznamek: " + pocetulozenychpoznamek + "\n"; for (int i = 0; i < pocetulozenychpoznamek; i++) { text += (i + 1) + ": " + poznamky[i] + "\n"; return text; Výpis 1.4. package cviceni12.povinna; public class HlavniProgram { public static void main(string[] args) { // priklad pouziti tridy PoznamkovyBlok // muzete samozrejme zkouset dalsi volani metod PoznamkovyBlok notebook = new PoznamkovyBlok(); notebook.pridejpoznamku("poznamka1"); notebook.pridejpoznamku("poznamka2"); notebook.pridejpoznamku("poznamka3"); notebook.pridejpoznamku("poznamka4"); notebook.pridejpoznamku("poznamka5"); notebook.pridejpoznamku("poznamka6"); notebook.odeberpoznamku(2); notebook.odeberpoznamku(2); notebook.pridejpoznamku("poznamka7"); notebook.odeberpoznamku(4); 5