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.