Moduł 9 œ Strumienie i pliki
Transkrypt
Moduł 9 œ Strumienie i pliki
MODU 9 – STRUMIENIE I PLIKI 93 Modu 9 – Strumienie i pliki Zawarto jednostki Po zrealizowaniu jednostki b dziesz w stanie: odczytywa oraz zapisywa dane do pliku tekstowego i binarnego zarz dza systemem plików i katalogów systemu operacyjnego przetwarza strumie danych zasobów sieci Internet kompresowa pliki i katalogi zawarte na no nikach pami ci Wprowadzenie Program komputerowy sk!ada si z ci gu instrukcji wykonywanych przez komputer. Podstaw dla wykonania programu s dane wej ciowe, stanowi ce $ród!o informacji. Rezultatem dzia!ania programu s dane wyj ciowe, najcz ciej sk!adowane na no nikach pami ci. Operacje wej cia-wyj cia (ang. I/O) stanowi fundament dla komunikacji programu komputerowego z otoczeniem. Strumienie danych Operacje wej cia-wyj cia w j zyku Java opieraj si na poj ciu „strumienia” (ang. stream), rozumianego jako kana! transmisyjny, przez który przep!ywa sekwencja bajtów ze $ród!a do programu lub z programu do miejsca przeznaczenia. Gdy dane przekazywane s ze $ród!a do programu, mowa jest o potoku wej ciowym (ang. input stream), natomiast je li dane przekazywane s z programu do miejsca przeznaczenia, wtedy okre lane jest to jako strumie wyj ciowy (ang. output stream). 0ród!em, czy miejscem przeznaczenia danych mog by pliki dyskowe, urz dzenia (np. drukarka, skaner), inne programy, czy zasoby danych dost pne w sieci (np. zasoby sieci Internet). ród o danych Program w Javie Program w Javie strumie% wej cia strumie% wyj cia Miejsce przeznaczenia Rys. 3. Wej ciowe i wyj ciowe strumienie danych. Istnieje poka$na grupa klas bibliotecznych do obs!ugi strumieni danych. Poniewa1 Java dzieli strumienie danych na strumienie wej cia oraz wyj cia, st d te1 dost pne klasy zosta!y podzielone na klasy obs!uguj ce strumienie wej cia oraz wyj cia. Poni1sza tabela przedstawia klasy bazowe. Tabela 2. Modyfikatory dost!pu do sk#adowych obiektu. STRUMIE ZNAKOWY BINARNY Wej ciowy (input) Java.io.Reader Java.io.InputStream Wyj ciowy (output) Java.io.Writer Java.io.OutputStream MODU 9 – STRUMIENIE I PLIKI 94 W zale1no ci od charakteru $ród!a lub miejsca przeznaczenia danych korzystamy z dedykowanych klas pochodnych. STRUMIENIE PLIKOWE Sekwencyjny dost p do plików105 realizowany jest poprzez klasy FileInputStream, FileOutputStream oraz FileReader, FileWriter. Dwie pierwsze umo1liwiaj dost p (odczyt oraz zapis) do danych binarnych (pliki graficzne, d$wi kowe,…), a tak1e do danych tekstowych w formacie ASCII, natomiast dwa ostatnie realizuj dost p do plików tekstowych w formacie Unicode. Poni1szy program ilustruje odczyt zawarto ci pliku tekstowego. Nale1y zwróci uwag na konieczno u1ycia obs!ugi b! dów. import java.io.*; public class OdczytPlikuTekstowego { public static void main(String[] args) { FileReader plik = null; int znak; try { // obiekt reprezentuj3cy wskazany plik tekstowy plik = new FileReader("dane.txt"); // odczyt kolejnych znaków z pliku while ( (znak = plik.read()) != -1 ) { // wy wietlenie odczytanego znaku na konsoli System.out.print((char)znak); } } catch (FileNotFoundException e) { System.out.println("Brak pliku o podanej nazwie!"); } catch (IOException e) { System.out.println("Problem z odczytem pliku!"); } finally { if (plik != null) try { plik.close(); } catch (IOException e){ System.out.println("Problem z zamkni>ciem pliku!"); } } } } Dla zwi kszenia wydajno ci operacji wej cia–wyj cia odczyt oraz zapis danych mo1e by buforowany co realizowane jest poprzez u1ycie klas BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter. FileReader plik = new FileReader("dane.txt"); BufferedReader plikBuforowany = new BufferedReader(plik); … String liniaTekstu; liniaTekstu = plikBuforowany.readLine(); … Dodatkowo klasa BufferedReader posiada metod pojedynczej linii z pliku tekstowego. readLine(), umo1liwiaj c odczyt STRUMIENIE SIECIOWE W dobie Internetu trudno wyobrazi sobie j zyk programowania, który nie umo1liwia!by dost pu oraz korzystania z zasobów zgromadzonych w sieci. J zyk programowania Java, dzi ki rozbudowanej bibliotece klas, posiada silne wsparcie dla wykonywania takich operacji. Jednym z podstawowych narz dzi umo1liwiaj cym dost p do zasobów sieciowych jest klasa java.net.URL. Dzi ki zastosowaniu ujednoliconego formatu adresowania URL (ang. Uniform Resource Locator), mo1liwe jest wykorzystanie dowolnego zasobu udost pnionego w sieci WWW. Mo1e nim by zarówno plik, katalog, ale tak1e poprzez wykorzystanie dost pnych protoko!ów, dost p do zasobów zgromadzonych w bazach 105 Wyró1niamy sekwencyjny dost p do plików (ang. sequencial–access) oraz dost p swobodny (ang. random–access). MODU 9 – STRUMIENIE I PLIKI 95 danych. Wi kszo klas niezb dna do u1ycia dla komunikacji z zasobami Internetu dost pna jest w pakiecie java.net. Pliki i katalogi Obiekt klasy File reprezentuje pojedynczy plik w systemie lub katalog (równie1 nieistniej cy). Szereg metod tej klasy umo1liwia operowanie na plikach lub katalogach systemu. Poni1szy przyk!ad ilustruje u1ycie klasy File do wy wietlenia zawarto ci katalogu Windows: import java.io.*; public class ZawartoscFolderu { public static void main(String[] args) { String nazwaFolderu = "C:" + File.separator + "WINDOWS"; File folder = new File(nazwaFolderu); for(String nazwaPlikuLubFolderu : folder.list()) System.out.println(nazwaPlikuLubFolderu); } } Ponadto metody klasy File umo1liwiaj w szczególno ci utworzenie nowego pliku, usuwanie plików, tworzenie folderów, zmian atrybutów plików, zmian nazwy pliku, sprawdzenie statusu (plik, czy katalog). Pe!ny wykaz metod dost pny jest w Java API. Pytania sprawdzaj ce 1. Wska1 ró1nice pomi dzy klasami Reader oraz InputStream. 2. J zyk Java zawiera par klas: InputStreamReader oraz OutputStreamWriter. Jaki jest cel stosowania tych klas? 3. Jak funkcj pe!ni metoda mkdirs() klasy java.io.File ? 4. Wymie metody umo1liwiaj ce uzyskanie szczegó!owych informacji o dowolnym pliku dost pnym na no niku pami ci. 5. Jak funkcj pe!ni pole statyczne File.separator? Podaj cel jego stosowania w kontek cie tworzenia programów uruchamianych w otoczeniu ró1nych systemów operacyjnych. 6. W jaki sposób mo1na uzyska znak ko ca linii, niezale1ny od stosowanego systemu operacyjnego? 7. Co oznacza skrót URL? Podaj sk!adni jego zapisu. 8. W jaki sposób realizowane jest dopisywanie danych na ko cu pliku? Co stanie si , gdy plik do zapisu zostanie otwarty z warto ci parametru append równ false? 9. Operacja buforowania dost pu do danych pozwala na zwi kszenie wydajno ci odczytu oraz zapisu informacji. W jaki sposób jest realizowana? 10. Co oznacza wyj tek: MalformedURLException? W jakiej sytuacji jest generowany? Zadania do wykonania Dla wykonania zada zawartych w tej sekcji utwórz plik tekstowy o nazwie RedutaOrdona.txt zawieraj cy fragment utworu Adama Mickiewicza. REDUTA ORDONA – OPOWIADANIE ADIUTANTA Nam strzela nie kazano. -- Wst pi!em na dzia!o I spójrza!em na pole; dwie cie armat grzmia!o. Artyleryi ruskiej ci gn si szeregi, Prosto, d!ugo, daleko, jako morza brzegi; I widzia!em ich wodza: przybieg!, mieczem skin ! I jak ptak jedno skrzyd!o wojska swego zwin !; Wylewa si spod skrzyd!a ci niona piechota D!ug czarn kolumn , jako lawa b!ota, MODU 9 – STRUMIENIE I PLIKI 96 Nasypana iskrami bagnetów. Jak s py Czarne chor gwie na mier prowadz zast py. Przeciw nim sterczy bia!a, w ska, zaostrzona, Jak g!az bodz cy morze, reduta Ordona. Sze tylko mia!a armat; wci 1 dymi i wiec ; I nie tyle pr dkich s!ów gniewne usta miec , Nie tyle przejdzie uczu przez dusz w rozpaczy, Ile z tych dzia! lecia!o bomb, kul i kartaczy. Patrz, tam granat w sam rodek kolumny si nurza, Jak w fale bry!a lawy, pu!k dymem zachmurza; P ka ród dymu granat, szyk pod niebo leci I ogromna !ysina ród kolumny wieci. Tam kula, lec c, z dala grozi, szumi, wyje. Ryczy jak byk przed bitw , miota si , grunt ryje; Ju1 dopad!a; jak boa ród kolumn si zwija, Pali piersi , rwie z bem, oddechem zabija. Najstraszniejszej nie wida , lecz s!ycha po d$wi ku, Po waleniu si trupów, po ranionych j ku: Gdy kolumn od ko ca do ko ca przewierci, Jak gdyby rodkiem wojska przeszed! anio! mierci. PLIKI I KATALOGI Zadanie 136 – PojemnoscDyskow.java Wi kszo komputerów wyposa1ona jest w pami masow . Napisz program wy wietlaj cy na konsoli wykaz dost pnych no ników pami ci wraz z informacj o ich ca!kowitej pojemno ci. Rozwi/zanie Zapoznaj si z wykazem dost pnych metod klasy java.io.File. import java.io.*; public class PojemnoscDyskow { public static void main(String[] args) { String folderGlowny = File.separator; String zasob; double pojemnosc; double GB = 1024*1024*1024; System.out.println("NAZWA POJEMNOLM"); File[] dyski = (new File(folderGlowny)).listRoots(); for(File dysk : dyski) { zasob = dysk.getPath(); pojemnosc = dysk.getTotalSpace()/GB; System.out.printf("%4s %8.2fGB\n",zasob,pojemnosc); } } } Zadanie 137 – ParametryDyskow.java Napisz program, który dla ka1dego z no ników pami ci dost pnych w systemie wy wietli na konsoli informacje o jego ca!kowitej pojemno ci, ilo ci przestrzeni zaj tej oraz wolnej. Informacje wy wietl w MB. Zadanie 138 – FolderDyskuSystemowego.java Napisz program wy wietlaj cy zawarto folderu g!ównego dysku systemowego. MODU 9 – STRUMIENIE I PLIKI 97 Rozwi/zanie import java.io.*; public class FolderDyskuSystemowego { public static void main(String[] args) { String nazwaFolderu = "C:" + File.separator; File folder = new File(nazwaFolderu); for(String nazwaPlikuLubFolderu : folder.list()) System.out.println(nazwaPlikuLubFolderu); } } Zadanie 139 – ZawartoscFolderu.java Napisz program wy wietlaj cy na konsoli zawarto dowolnego folderu wskazanego w wierszu polece . W przypadku plików wy wietl ich nazw , rozmiar oraz dat ostatniej modyfikacji. Rozwi/zanie Zapoznaj si z metodami klasy java.io.File: isDirectory(), length(), lastModified() Zadanie 140 – ObjetoscPlikowFolderu.java Napisz program, obliczaj cy ca!kowit Przyk!adowe wywo!anie programu: obj to listFiles(), ifFile(), plików zawartych we wskazanym katalogu. java ObjetoscPlikowFolderu C:\WINDOWS Zadanie 141 – StrukturaFolderow.java Folder (inaczej katalog) zwi zany z logiczn organizacj danych na no nikach pami ci, umo1liwia uporz dkowanie informacji zapisanych na dysku. Napisz program, który w katalogu bie1 cym utworzy poni1sz struktur folderów: KOMPUTER (LAPTOP (IBM,COMPAQ), PALMTOP) Zadanie 142 – TworzenieFolderow.java Napisz program, który we wskazanym katalogu utworzy folder o podanej nazwie. Informacj , gdzie utworzy nowy folder oraz nazw folderu do utworzenia odczytaj z wiersza polece . STRUMIENIE PLIKOWE Zadanie 143 – RedutaOrdona.java Plik tekstowy RedutaOrdona.txt zawiera fragment utworu Adama Mickiewicza. Napisz program wy wietlaj cy tre utworu na konsoli. Rozwi/zanie Wykorzystaj przyk!adowy kod programu zawarty w cz ci teoretycznej. Zadanie 144 – NumerowanieWierszy.java Napisz program, wy wietlaj cy na konsoli ponumerowane RedutaOrdona.txt zgodnie z poni1szym przyk!adem: wiersze pliku tekstowego 01. Nam strzelaT nie kazano. -- Wst3pi em na dzia o 02. I spójrza em na pole; dwie cie armat grzmia o. 03. Artyleryi ruskiej ci3gn3 si> szeregi, ... Zadanie 145 – ZawartoscPlikuTekstowego.java Napisz program wy wietlaj cy na konsoli zawarto wierszu polece . dowolnego pliku tekstowego o nazwie podanej w Zadanie 146 – BuforowanieDanych.java Napisz program, który realizowa! b dzie buforowany odczyt zawarto ci pliku tekstowego. Korzystaj c z programu, wy wietl na konsoli zawarto pliku RedutaOrdona.txt. MODU 9 – STRUMIENIE I PLIKI 98 Zadanie 147 – StatystykaZnakowPliku.java Napisz program obliczaj cy liczb samog!osek oraz spó!g!osek wyst puj cych w pliku RedutaOrdona.txt. Uzyskane rezultaty wy wietl na konsoli. Zadanie 148 – StatystykaPliku.java Praktycznie ka1dy edytor tekstu posiada mo1liwo okre lenia liczby znaków, czy wyrazów wyst puj cych w edytowanym dokumencie. Napisz program, który dla pliku RedutaOrdona.txt wyznaczy liczb znaków, wyrazów oraz wierszy wyst puj cych w utworze. Uzyskane rezultaty wy wietl na konsoli. Zadanie 149 – KrainyGeograficzne.java Napisz program, który na podstawie danych odczytanych z wiersza polece umo1liwia utworzenie pliku tekstowego z wykazem krain geograficznych. Rozwi/zanie Utwórz program na podstawie poni1szego kodu. Korzystaj c z programu wprowad$ do pliku tekstowego nast puj ce nazwy krain geograficznych: Karpaty, Wy1yna Ma!opolska, Pojezierze Mazurskie, Nizina Wielkopolska, Wy1yna Krakowsko-Cz stochowska. import java.io.*; public class KrainyGeograficzne { public static void main(String[] args) { FileWriter plik = null; final boolean dopisywanie = true; // tryb zapisu do pliku String EOL = System.getProperty("line.separator"); // znak ko%ca linii try { // obiekt reprezentuj3cy wskazany plik tekstowy plik = new FileWriter("KrainyGeograficzne.txt",dopisywanie); plik.write(args[0] + EOL); System.out.println("Zapisano do pliku: " + args[0]); } catch (IOException e) { System.out.println("Problem z zapisem do pliku!"); } finally { if (plik != null) try { plik.close(); } catch (IOException e){ System.out.println("Problem z zamkni>ciem pliku!"); } } } } Zadanie 150 – DaneStudentaCSV.java CSV (ang. Comma Separated Values) to format przechowywania danych w plikach tekstowych, gdzie poszczególne informacje rozdzielone s znakiem przecinka. Napisz program, który umo1liwia odczytanie z konsoli danych personalnych studenta (nazwisko, imi , wiek, kod pocztowy, miejscowo ) i dopisanie ich do pliku DaneStudenta.txt. Struktura pliku tekstowego zosta!a przedstawiona poni1ej: Badura,Monika,23,31-500,Kraków Wójcicki,Marek,22,00-986,Warszawa Maj,Robert,23,30-824,Kraków Wype!nij plik DaneStudenta.txt danymi (min. 5 pozycji). Nast pnie spróbuj otworzy go w aplikacji arkusz kalkulacyjny Excel, obs!uguj cym ten format danych. Zadanie 151 – RedutaOrdonaHTML.java Odszukaj w sieci Internet opis struktury dokumentu HTML. Nast pnie napisz program, który utworzy plik RedutaOrdona.html zawieraj cy zawarto pliku RedutaOrdona.txt. Poszczególne wiersze utworu wy wietl kursyw . Otwórz tak utworzony plik w dowolnej przegl darce internetowej. MODU 9 – STRUMIENIE I PLIKI 99 Zadanie 152 – KonwersjaZnakowPliku.java Napisz program konwertuj cy we wskazanym pliku tekstowym litery ma!e na wielkie, a wielkie na ma!e. Nazw pliku oraz jego lokalizacj odczytaj z konsoli. Zastosuj program do konwersji znaków w pliku RedutaOrdona.txt. Zadanie 153 – SzyfrCezara.java Odszukaj w Internecie informacje dotycz ce szyfru Cezara. Nast pnie napisz program szyfruj cy dowolny plik tekstowy. Przyk!adowe wywo!anie programu: java SzyfrCezara C:\pliki\RedutaOrdona.txt D:\wyniki\RedutaOrdonaZaszyfrowana.txt STRUMIENIE SIECIOWE Zadanie 154 – ZasobySieciInternet.java Napisz program wy wietlaj cy na konsoli zawarto wskazanej strony WWW. Rozwi/zanie import java.net.*; import java.io.*; public class ZasobyInternetu { public static void main(String[] args) { String adres = "http://www.uek.krakow.pl"; try { URL url = new URL(adres); InputStream inStream = url.openStream(); BufferedReader dane = new BufferedReader(new InputStreamReader(inStream)); String linia = ""; while ((linia = dane.readLine()) != null) System.out.println(linia); } catch (Exception e) { System.out.println(e.toString()); } } } Zadanie 155 – KursyWalutNBP.java Strona internetowa http://www.nbp.pl/Kursy/KursyA.html zawiera tabel rednich kursów walut obcych. Napisz program, który na podstawie danych zawartych w tabeli wy wietli na konsoli redni kurs nast puj cych walut: euro, dolar ameryka ski, funt szterling, frank szwajcarski.