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.

Podobne dokumenty