Cvičení zaměřené na práci se vstupem a výstupem.
Upravte třídu LabeledPolygon.Builder
tak, aby implementovala rozhraní PolygonReadable
.
Upravte třídu LabeledPolygon
tak, aby implementovala rozhraní PolygonWritable
.
-
Metoda
read(InputStream)
vezme otevřený vstup obsahující pojmenované vrcholy, vrcholy načte a přidá je k existujícím vrcholům polygonu. Při jakékoliv chybě vstupu/výstupu nebo chybě formátu vstupních dat musí metoda atomicky selhat a vyhoditIOException
. (atomicky = načítám všechno nebo nic) Formát vstupních dat je následující:- Vstup je textový.
- Co vrchol, to jeden řádek.
- Každý řádek je ve formátu "x y nazev vrcholu", tj. nejprve souřadnice vrcholu oddělené mezerou a poté název vrcholu (název může obsahovat mezery). Viz např. soubor polygon-ok.txt.
-
Metoda
write(OutputStream)
zapíše vrcholy do daného výstupního proudu. Výstupní formát je stejný jako pro předchozí metodu. -
Metody
write(File)
aread(File)
budou fungovat stejně jako předchozí, budou ale pracovat se souborem namísto vstupně-výstupního proudu. Vyhněte se opakování kódu! -
Vytvořte metodu
writeJson(OutputStream os)
, která bude do výstupního proudu zapisovat mapu ve formátu JSON.- Využijte externí knižnici gson.
Pro maven je potřeba přidat závislost do souboru
pom.xml
v části<dependencies>
. - Prečtěte si dokumentaci třídy Gson.
- Podle dokumentace použijte tzv. pretty print.
- Objekt typu Gson může být znovu použitý, proto jej stačí vytvořit pouze jednou.
- Využijte externí knižnici gson.
Pro maven je potřeba přidat závislost do souboru
-
Upravte třídu
Demo
následujícím způsobem:- Třída vytvoří
LabeledPolygon
ze souborupolygon-ok.txt
. - Polygon bude také obsahovat vrchol s názvem
vrchol x
a souřednicemi[123, 456]
. - Výstup vypište do výstupního proudu
System.out
v JSON formátu. - Pro kontrolu, že výstupní proud je stále otevřený pak vypište
Hello World!
.
- Třída vytvoří
-
Spuštěním třídy
Draw
se načte polygon-ok.txt a vykreslí se na obrazovce .
- Zavírejte pouze proudy/soubory, které jste otevřeli.
- Používejte try with resources.
- Nastudujte si metody
Writer#flush()
,Reader#ready()
. - Vytvoření souboru:
new File("soubor.txt")
. Demo.main
může vyhoditIOException
.- Namísto
\n
používejte univerzální oddělovač konců řádků,System.lineSeparator()
. - Testy vytvářejí soubor
polygon-out.txt
.