Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Język Java Obsługa systemu wejścia-wyjścia. 2 System wejścia-wyjścia System We/Wy (I/O) - odczyt i zapis danych potrzebnych programom Wejście lub wyjście.

Podobne prezentacje


Prezentacja na temat: "Język Java Obsługa systemu wejścia-wyjścia. 2 System wejścia-wyjścia System We/Wy (I/O) - odczyt i zapis danych potrzebnych programom Wejście lub wyjście."— Zapis prezentacji:

1 Język Java Obsługa systemu wejścia-wyjścia

2 2 System wejścia-wyjścia System We/Wy (I/O) - odczyt i zapis danych potrzebnych programom Wejście lub wyjście - np. –plik –konsola –strona internetowa Klasy obsługujące We/Wy - w pakiecie java.io

3 3 Pakiet java.io Działania na plikach i katalogach - klasa File Odczyt i zapis danych przy pomocy strumieni (ang. streams) – pojęcie abstrakcyjne reprezentuje źródło lub ujście danych, ukrywa implementację urządzenia I/O

4 4 Klasa File Obiekty klasy - pliki lub katalogi, np. File mojPlik = new File("c:/programy/Demo.java"); File mojKatalog = new File("."); Metody klasy - np. –exists() - zwraca true, jeśli obiekt istnieje –isFile(), isDirectory() –canWrite(), canRead() –getName(), getPath() –length(), lastModified(), –renameTo()

5 5 Klasa File Metoda list(), list(FilenameFilter) –działa tylko dla obiektów będących katalogami –zwraca zbiór plików w katalogu – tablicę obiektów String –FilenameFilter – interfejs, metoda: boolean accept(dir, fname) Dodatkowe możliwości aplikacji, np. –założenie katalogu - metoda mkdirs() –usunięcie katalogu lub pliku - metoda delete()

6 6 Klasa File import java.io.FilenameFilter; import java.io.File; class PdfFilter implements FilenameFilter { public boolean accept(File dir, String name) { return (name.endsWith(".pdf")); } class Pdf{ public static void main (String[] args){ String dir = "."; File f = new File(dir); FilenameFilter filter = new PdfFilter(); String list[] = f.list(filter); System.out.println("Pliki pdf: " ); for (int i = 0; i < list.length; i++) System.out.println("\n" + ls[i]); }

7 7 Strumienie Obsługa We/Wy - przy pomocy strumieni Jednakowe algorytmy sekwencyjnego odczytu/zapisu dla wszystkich rodzajów danych OdczytZapisotwórz strumieńdopóki są dane czytaj dane zapisuj danezamknij strumień

8 8 Rodzaje strumieni Znakowe (sekwencje znaków) od JDK 1.1 –potomne po Reader i Writer –wczytują/zapisują sekwencje znaków w określonym systemie kodowania –automatyczne przekształcanie znaków z/na kod Unicode (java.nio.charset.Charset – mapowanie pomiędzy 16- bitowym UTF i innymi zestawami znaków) Bajtowe (sekwencje bajtów) –potomne po InputStream i OutputStream –głównie do odczytu/zapisu danych binarnych Klasy pomostowe: InputStremReader, OutputStreamWriter

9 9 Obsługa strumienia wejściowego Utworzenie obiektu strumienia skojarzonego ze źródłem danych - automatyczne otwarcie strumienia Odczytanie informacji ze strumienia - metoda read() Zamknięcie połączenia ze strumieniem - metoda close()

10 10 Obsługa strumienia wyjściowego Utworzenie obiektu strumienia skojarzonego z ujściem danych - automatyczne otwarcie strumienia Zapisanie informacji do strumienia - metoda write() Zamknięcie połączenia ze strumieniem - metoda close()

11 11 Klasa InputStream Klasa bazowa dla klas dostarczających na wejście sygnały z różnych źródeł Rodzaje źródeł –tablica bajtów –obiekt klasy String –plik –potok (ang. pipe) –sekwencja innych strumieni –inne (np. połączenia internetowe)

12 12 Klasy pochodne po InputStream ByteArrayInputStream - odczyt danych z pamięci (argument – tablica bajtów - bufor) StringBufferInputStream - odczyt danych z pamięci (argument - obiekt klasy String) FileInputStream - odczyt danych z pliku PipedInputStream - odczyt danych z potoku podłączonego do PipedOutputStream innego wątku SequenceInputStream - konkatencja strumieni, dwóch lub obiekt Enumeration FilterInputStream - filtrowanie strumieni – klasa bazowa dekoratorów umożliwiających bardziej przystępną obsługę strumieni niskiego poziomu

13 13 Klasa OutputStream Decyduje o rodzaju wyjścia –tablica bajtów –plik –potok Klasy pochodne po OutputStream –ByteArrayOutputStream –FileOutputStream –PipedOutputStream –FilterOutputStream

14 14 Klasa FileInputStream Argument konstruktora –łańcuch znaków z nazwą pliku –obiekt klasy File –obiekt klasy FileDescriptor – uchwyt do specyficznej dla maszyny struktury reprezentującej otwarty plik, lub inne źródło (in, out, err) Metoda read() zwraca –liczbę całkowitą odpowiadającą następnemu bajtowi w strumieniu –tablicę bajtów –liczbę -1 przy osiągnięciu końca pliku

15 15 Klasa FileOutputStream Argument konstruktora - jak w klasie FileInputStream Druga postać konstruktora - z dodatkowym argumentem typu boolean –false - zastąpienie zawartości pliku danymi –true - dopisanie danych na końcu pliku Zapis danych - metoda write() z argumentem typu int

16 16 Aplikacja KopiaPliku import java.io.*; public class KopiaPliku { public static void main (String args[]) { try { FileInputStream p1 = new FileInputStream("dane.txt"); FileOutputStream p2 = new FileOutputStream("wynik.txt"); int dane; while ((dane = p1.read()) != -1) { p2.write(dane); } p1.close(); p2.close(); } catch (IOException e) { System.out.println(e.toString()); } }

17 17 Klasa FilterInputStream Modyfikacja strumienia wejściowego poprzez dekorator; użycie jest przeźroczyste, ten sam interfejs, czasami rozbudowany; stworzone aby zmniejszyć ilość klas Klasy pochodne po FilterInputStream –DataInputStream odczyt danych niezależnie od platformy –BufferedInputStream wymuszenie użycia bufora (opcja: rozmiar), zaleca się używać zawsze –LineNumberInputStreamśledzenie numerów wierszy –PushbackInputStream jednobajtowy bufor zwrotny umożliwia zwrot bajtu, np. pochodzącego z innego źródła do strumienia i ponowny odczyt z bufora i strumienia

18 18 Klasa DataInputStream Argument konstruktora - obiekt klasy InputStream Metody odczytu danych –readBoolean() –readByte(), readInt(), readLong(), readShort() –readDouble(), readFloat() –readChar() Analogiczne metody zapisu w klasie DataOutputStream, np. writeBoolean(),

19 19 Klasa FilterOutputStream Formatowanie strumienia wyjściowego Klasy pochodne –DataOutputStreamzapis danych –PrintStreamformatuje dane na konsolę metody print, printlnaby nadawały się do odczytania, opcja: czy opróżniać bufor po znaku końca wiersza –BufferedOutputStreamwymusza użycie bufora

20 20 Przykład użycia klas potomnych po FilterOutputStream int[] x = { 1, 22, 14, 6 }; try { FileOutputStream plik = new FileOutputStream("x.txt"); BufferedOutputStream bufor = new BufferedOutputStream(plik); DataOutputStream dane = new DataOutputStream(bufor); for (int i = 0; i < 4; i ++) dane.writeInt(x[i]); dane.close(); } catch (IOException e) { }

21 21 Klasy Reader i Writer Odpowiedniki większości klas potomnych po InputStream i OutputStream, np. FileReader FileInputStream FileWriter FileOutputStream StringReaderStringBufferInputStream StringWriter brak odpowiednika CharArrayReaderByteArrayInputStream CharArrayWritterByteArrayOutputStream

22 22 Klasa FileReader Konstruktory - jak w klasie FileInputStream Zwrócenie kodu Unicode kolejnego znaku int read() Zapisanie wczytanych znaków do tablicy int read(char[] tablica, int początek, int ilość) Odczytanie całej linii tekstu - użycie metody readLine() klasy BufferedReader String readLine()

23 23 Aplikacja CzytanieZnakow import java.io.*; public class CzytanieZnakow { public static void main (String args[]) { try { FileReader plik = new FileReader("dane.txt"); int bajt; while ( (bajt = plik.read()) != -1) System.out.print( (char)bajt); System.out.println(" "); plik.close(); } catch (IOException e) { } }

24 24 Przykład czytania wierszy try { FileReader plik = new FileReader("lista.txt"); BufferedReader bufor = new BufferedReader(plik); boolean koniecPliku = false; while (!koniecPliku) { String wiersz = bufor.readLine(); if (wiersz == null) koniecPliku = true; else System.out.println(wiersz); } bufor.close(); } catch (IOException e) { }

25 25 Klasa FileWriter Konstruktory - jak w klasie FileOutputStream Zapisanie znaku write(int znak) Zapisanie znaków z tablicy write(char[] tablica, int początek, int ilość) Możliwość użycia klasy BufferedWriter - metoda newLine()

26 26 Czytanie ze standardowego wejścia System.in (klawiatura) BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); while((str=input.readLine()).length!=0) System.out.println(str); Zapis do standardowego wyjścia PrintWriter output = new PrintWriter(System.out, true); output.println(Ala ma kota.); Standardowe we/wy

27 27 Dziedziczy po java.lang.Object Konstruktor (plik, opcja=r|rw) Do plików o rekordach o znanym rozmiarze Umożliwia dostęp swobodny Metody –seek() –getFilePointer() –length() –metody do przeszukiwania Klasa RandomAccesFile

28 28 Klasy: –CheckedInput(Output)Stream – produkuje sumę kontrolną dla dowolnego obiektu Input(Output)Stream –ZipInput(Output)Stream – kompresja ZIP –GZIPInput(Output)Stream -kompresja GZIP BufferedOutputStream = new BufferedOutputStream(new ZipOutputStream(new FileOutputStream(plik.zip))) Kompresja danych

29 29 Serializacja obiektów ObjectInputStream i ObjectOutputStream - specjalne strumienie do odczytu i zapisu obiektów (serializacji) Mechanizm serializacji –zamiana obiektu na sekwencję bajtów –przesłanie sekwencji bajtów –odtworzenie oryginalnego obiektu Wykorzystanie serializacji - np. RMI

30 30 Interfejs Serializable Możliwość serializacji obiektu - jeśli klasa implementuje interfejs Serializable Interfejs Serializable - pusty (brak konieczności przesłaniania metod) Obsługa serializacji - w klasach ObjectInputStream i ObjectOutputStream

31 31 Zapis obiektu do strumienia Utworzenie obiektu klasy potomnej po OutputStream "Opakowanie" obiektu w obiekt klasy ObjectOutputStream Wywołanie metody writeObject() Możliwe wystąpienie wyjątku NotSerializableException

32 32 Aplikacja PiszObiekt import java.io.*; import java.util.*; public class PiszObiekt implements Serializable { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); Date data = cal.getTime(); try { FileOutputStream p1 = new FileOutputStream("czas"); ObjectOutputStream s = new ObjectOutputStream(p1); s.writeObject("Dzisiaj jest: "); s.writeObject(data); s.close(); } catch (IOException e) { } }

33 33 Odczyt obiektu ze strumienia Utworzenie obiektu klasy potomnej po InputStream "Opakowanie" obiektu w obiekt klasy ObjectInputStream Wywołanie metody readObject()

34 34 Aplikacja CzytajObiekt import java.io.*; import java.util.*; public class CzytajObiekt implements Serializable { public static void main(String[] args) { try { FileInputStream p2 = new FileInputStream("czas"); ObjectInputStream s = new ObjectInputStream(p2); String dzisiaj = (String)s.readObject(); Date data = (Date)s.readObject(); s.close(); System.out.println(dzisiaj + data); } catch (IOException e) { } catch (ClassNotFoundException e) { } } }

35 35 Eksternalizacja Kontrola serializacji - implementacja interfejsu Externalizable zamiast Serializable Metody interfejsu Externalizable - writeExternal() i readExternal() Przesłonięcie metod interfejsu w klasie


Pobierz ppt "Język Java Obsługa systemu wejścia-wyjścia. 2 System wejścia-wyjścia System We/Wy (I/O) - odczyt i zapis danych potrzebnych programom Wejście lub wyjście."

Podobne prezentacje


Reklamy Google