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:
1 2 3 4 5 6 7 8 9 | 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.