PJ1 Lesson 9

Toto cvičení vychází z výukového kurzu od fy Oracle – https://docs.oracle.com/javase/tutorial/essential/io/streams.html – takže pro hlubší vhled či samostudium můžete zavítat na stránky kurzu.

Naprogramujte program, který zkopíruje zadaný soubor pomocí InputStream(FileInputStream) a OutputStream(FileOutputStream). Kopírování probíhá po bytech. Pro otestování použijte soubor Faust-Goethe.txt.

Předchozí příklad upravte tak, že se kopírování provádí pomocí bufferu (pole bytů velikosti 1024*1024B).

Naprogramujte předchozí příklad pomocí Writeru a Readeru. Kopírování probíhá po znacích a provádí se konverze na velká písmena.

U předchozího úkolu použijte při zápisu použijte metodu DEFLATE (výstup bude komprimován metodou GZIP – použije se GzipOutputStream). Výstupní soubor vhodně pojmenujte – bude obsahovat příponu gz. Soubor prozkoumejte zkuste dekomprimovat (umí to i Servant Salamander).

Naprogramujte načítání po řádcích (použijte BufferedReader) na výstup tiskněte očíslované řádky.

Pomocí třídy Scanner načítejte ze souboru slova a tiskněte je na konzoli. (By default, a scanner uses white space to separate tokens.)

Pomocí třídy Scanner načtěte ze souboru doubles.txt čísla double a spočítejte jejich aritmetický průměr.

Pomocí třídy DataOutputStream zapište do souboru trojice <double,int,String>, které budou vycházet z dat:

static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };
static final int[] units = { 12, 8, 13, 29, 50 };
static final String[] descs = {
"Java T-shirt",
"Java Mug",
"Duke Juggling Dolls",
"Java Pin",
"Java Key Chain"
};

Prozkoumejte výsledný soubor.

Pomocí DataInputStream data načtěte a vytiskněte.

Domácí úkol

Načítejte data ze souboru Faust-Goethe.txt.zip. Pro dekomprimaci dat použijte ZipInputStream(na samotný objekt třídy ZipInputStream musíte zavolat před čtením metodu getNextEntry – jinak práce je stejná jako s GZIPInputStream), data načítejte po řádcích pomocí metody BufferedReader.readLine a myslete na to, že text je v kódování UTF-8. Vytvořte výstupní soubor (Faust-Goethe-1250.txt.gz), který bude obsahovat text ve formátu:

<číslo-řádku>;<délka-řádku>;<načtený řádek z původního souboru>

Soubor bude ve formátu GZIP za použití třídy GZIPOutputStream a text bude v kódování znakové sady windows-1250 (znakovou sadu získáte jako “Charset.forName(“windows-1250”)“). Pro zápis textových dat použijte metodu PrintWriter.printf.