Cvičenie 8 – Čítanie zo súboru
Ciele cvičení:
- Čítanie a zapisovanie z/do textových súborov.
Záznam kliknutí
Vytvorte triedu ClickPane
, ktorá bude rozširovať triedu WinPane
. Klikacia plocha nech funguje tak, že pri kliknutí do plochy sa mieste kliknutia nakreslí bodka náhodného polomeru medzi 2 až 5. Do triedy ClickPane
pridajte metódu saveClicksToFile
, ktorá ako parameter dostane názov súboru (alebo referenciu na objekt triedy File
s názvom súboru). Táto metóda nech uloží do zadaného súboru informácie o všetkých nakreslených bodkách od vytvorenia plochy. Informácia o jednej bodke nech je v jednom riadku súboru a skladá sa z 3 čísel: x-ová súradnica stredu bodky, y-ová súradnica stredu bodky a polomer bodky.
Môžete predpokladať, že nikdy sa nespraví viac ako 1000 bodiek od vytvorenia kresliacej plochy (t.j. nemeňte veľkosť poľa po každom kliknutí).
Príklad súboru:
1
2
3 100 121 3.5
10 252 2.5
241 139 4.0
Do triedy ClickPane
pridajte „protimetódu“, ktorá na základe obsahu textového súboru s vyššie opísaným formátom nakreslí do kresliacej plochy v ňom uložené bodky.
Upozornenie: Ak chcete použiť ObjectInspector
na zavolanie metód objektov triedy ClickPane
pracujúcich so súbormi, musíte použiť verziu s parametrami typu String
.
Analýza súborov
Vytvorte triedu TextTurtle
, ktorá rozširuje triedu Turtle
a ktorá bude poskytovať základné spracovanie textových súborov.
- Priemer čísel: Pridajte do triedy
TextTurtle
metódu, ktorá ako parameter dostane názov súboru (prípadne referenciu na objekt triedyFile
). V tomto súbore sú len celé čísla oddelené medzerami (v jednom riadku môže byť aj viacero čísel). Vytvorená metóda nech vráti priemer čísel v súbore.
- Počet riadkov: Pridajte do triedy
TextTurtle
metódu, ktorá ako parameter dostane názov súboru (prípadne referenciu na objekt triedyFile
). Vytvorená metóda nech vráti počet riadkov v súbore.
Riadená korytnačka
Vytvorte triedu ControlledTurtle
, ktorá bude rozširovať triedu Turtle
. Do triedy ControlledTurtle
pridajte metódu executeFile
. Táto metóda dostane ako parameter názov (resp. cestu k) súboru s príkazmi pre korytnačku. Na cvičení stačí, ak naprogramujete vykonanie aspoň jedného príkazu bez parametrov a aspoň jedného príkazu s parametrami.
1
Pre obsah súboru s príkazmi platia tieto pravidlá:
- v každom riadku je jeden príkaz
- každý príkaz začína svojim názvom a je nasledovaný parametrami (reálne čísla)
- v súbore môžu byť tieto príkazy:
center
penDown
penUp
step
(1 parameter)turn
(1 parameter)dot
(1 parameter)setPosition
(2 parametre)moveTo
(2 parametre)
Príklad vstupného súboru:
1
2
3
4
5
6
7
8
9
10 setPosition 100 170
step 100
turn 120
dot 5
step 100
turn 120
dot 5
step 100
turn 120
dot 5
Rada: Vytvorte si pomocnú metódu, ktorá dostane ako parameter jeden riadok súboru (jeden príkaz) a vykoná príkaz v tomto riadku. Na spracovanie riadka použite Scanner
znakového reťazca.
1
Pre fajnšmekrov: vymyslite taký formát vstupného súboru, aby umožňoval zopakovať nejakú postupnosť príkazov zadaný počet krát (niečo ako for
-cyklus s pevným počtom opakovaní).
Ako súčasne čítať a zapisovať
Niekedy je potrebné súčasne čítať jeden súbor a zapisovať do iného súboru. Na túto činnosť môžeme použiť takúto schému:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Scanner citac = null;
PrintWriter zapisovac = null;
try {
citac = new Scanner(...);
zapisovac = new PrintWriter(...);
// pracujeme s citacom a zapisovacom
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (citac != null) {
try {
citac.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (zapisovac != null) {
try {
zapisovac.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Visual scanner dependency
1
2
3
4
5 <dependency>
<groupId>sk.upjs</groupId>
<artifactId>visual-scanner</artifactId>
<version>1.0.0</version>
</dependency>