Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Obsługa systemu wejścia-wyjścia

Podobne prezentacje


Prezentacja na temat: "Obsługa systemu wejścia-wyjścia"— Zapis prezentacji:

1 Obsługa systemu wejścia-wyjścia
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 - np. plik konsola strona internetowa Klasy obsługujące We/Wy - w pakiecie java.io

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 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 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 Strumienie Obsługa We/Wy - przy pomocy strumieni
Jednakowe algorytmy sekwencyjnego odczytu/zapisu dla wszystkich rodzajów danych Odczyt Zapis otwórz strumień otwórz strumień dopóki są dane dopóki są dane czytaj dane zapisuj dane zamknij strumień zamknij strumień

7 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 Bajtowe (sekwencje bajtów)‏ potomne po InputStream i OutputStream głównie do odczytu/zapisu danych binarnych Klasy pomostowe: InputStremReader, OutputStreamWriter

8 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()‏

9 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()‏

10 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)‏

11 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

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

13 Klasa FileInputStream
Argument konstruktora łańcuch znaków z nazwą pliku obiekt klasy File obiekt klasy FileDescriptor 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

14 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

15 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()); }

16 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 do strumienia

17 Klasa DataInputStream
Argument konstruktora - obiekt klasy InputStream Metody odczytu danych readBoolean()‏ readByte(), readInt(), readLong(), readShort()‏ readDouble(), readFloat()‏ readChar()‏

18 Klasa FilterOutputStream
Formatowanie strumienia wyjściowego Klasy pochodne DataOutputStream zapis danych PrintStream formatuje dane na konsolę metody print, println aby nadawały się do odczytania, opcja: czy opróżniać bufor po znaku końca wiersza BufferedOutputStream wymusza użycie bufora Analogiczne metody zapisu w klasie DataOutputStream, np. writeBoolean(),

19 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) { }

20 Klasy Reader i Writer Odpowiedniki większości klas potomnych po InputStream i OutputStream, np. FileReader FileInputStream FileWriter FileOutputStream StringReader StringBufferInputStream StringWriter brak odpowiednika CharArrayReader ByteArrayInputStream CharArrayWritter ByteArrayOutputStream

21 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 BufferReader String readLine()‏

22 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) { } }

23 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) { }

24 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()‏

25 Standardowe we/wy 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.”);

26 Klasa RandomAccesFile
Dziedziczy po java.lang.Object Konstruktor (plik, opcja=”r”|”rw”)‏ Do plików o rekordach o znanym rozmiarze Umozliwia dostęp swobodny Metody seek()‏ getFilePointer()‏ Length()‏ metody do przeszukiwania

27 Kompresja danych 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”)))‏

28 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

29 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

30 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

31 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) { } } }

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

33 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) { } } }

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

35 Eksternalizacja public void readExternal(java.io.ObjectInput s)‏
throws ClassNotFoundException, IOException{ nazwisko = s.readUTF(); wiek = s.readInt(); } public void writeExternal(java.io.ObjectOutput s)‏ throws IOException{ s.writeUTF(nazwisko); s.writeInt(wiek);


Pobierz ppt "Obsługa systemu wejścia-wyjścia"

Podobne prezentacje


Reklamy Google