Wstęp do strumieni danych

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Programowanie wizualne PW – LAB6 Wojciech Pieprzyca.
Mgr inż.Marcin Borkowski Podstawy Java Część II
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Dzisiejszy wykład Wyjątki.
Programowanie obiektowe PO PO - LAB 6 Wojciech Pieprzyca.
Wzorce.
Programowanie w języku Visual Basic
PASCAL (3) dr Anna Kwiatkowska.
Tworzenie i obsługa programów – przykład 3 uwagi cd. Wykorzystując różne klasy biblioteki języka Java należy pamiętać w jakim pakiecie się znajdują. Wszystkie.
Zrównoleglanie programu sekwencyjnego
Nguyen Hung Son Uniwersytet Warszawski
Podstawy języka Java Nguyen Hung Son Uniwersytet Warszawski.
Podstawy Programowania sieciowego w Javie
Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty zakres globalny : cały program zakres lokalny : definicja pojedynczej.
ODE Informacje wstępne. Pojęcia podstawowe n Obiektowa baza danych u język komunikacji u ziarnistość obiektów u identyfikacja obiektów n Transakcja -
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
Czytanie numerów puktów i ich współrzędnych z mapy.
Gniazda komunikacji sieciowej w języku Java
Programowanie w C Wykład 3
Język ANSI C Operacje we/wy
Czytanie, pisanie i rysowanie – cd.. Jeszcze jeden strumyk PrintStream działa jak PrintWriter, ale: Używa domyślnego (systemowego) kodowania Nie wyrzuca.
Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)
Obsługa systemu wejścia-wyjścia
Język Java Wielowątkowość.
Autor: Piotr Wojtowicz Opiekun naukowy referatu: dr inż. Cezary Worek
Podstawy programowania
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Pierwsze programy.
Definicja pliku tekstowego Operacje wykonywane na plikach tekstowych
Linux - polecenia.
W większości języków programowania biblioteki wejścia/wyjścia ukrywają szczegóły obsługi poszczególnych mediów pod abstrakcją strumienia (ang. stream).
Pliki Pojęcie i rodzaje plików Definicja typu plikowego Operacje wykonywane na plikach elementowych.
Pliki tekstowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików tekstowych. Pliki takie zawierają informację niezakodowaną
Tworzenie aplikacji mobilnych
Obsługa systemu wejścia-wyjścia
Programowanie obiektowe – zastosowanie języka Java SE
JAVA.
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Seminarium problemowe
Systemy wejścia i wyjścia Michał Wrona. Co to jest system wejścia i wyjścia? Pobierania informacji ze źródeł danych, zdolnych przesyłać sekwencje bajtów,
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Podstawy informatyki 2013/2014
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
Programowanie sieciowe w Javie
Podstawy programowania II Wykład 3: Obsługa plików w stdio.h.
System plików.
Podstawy programowania (4)
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
PROGRAMOWANIE W JAVA Informatyka Stosowana – ROK II / III Laboratoria mgr inż. Krzysztof Bzowski.
Programowanie sieciowe w Javie Michał Kuciapski
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
Instrukcje warunkowe w php. Pętla FOR Czasem zachodzi potrzeba wykonania jakiejś czynności określoną ilość razy. Z pomocą przychodzi jedna z najczęściej.
Strumienie w języku Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji:
InMoST, Java – przykładowa aplikacja Bartosz.Michalik
Programowanie Obiektowe – Wykład 6
Piotr Kawałek , Mateusz Śliwowski
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
(c) Krzysztof Barteczko 2014
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
Tworzenie wątków w Javie
Zapis prezentacji:

Wstęp do strumieni danych Programowanie operacji wejścia-wyjścia w Javie polega na życiu strumieni, które są obiektami klas strumieniowych z pakietu java.io. Strumień jest pojęciem abstrakcyjnym. Oznacza tor komunikacyjny pomiędzy dowolnym źródłem danych a ich miejscem przeznaczenia. Mamy więc dwie podstawowe operacje na strumieniu: wejściowe - do odczytu danych ze źródła wyjściowe – do zapisu danych w ich miejscu docelowym Operacje wejścia i wyjścia można przeprowadzić na danych binarnych lub na znakowych, więc strumienie dzielą się także na strumienie bajtowe i strumienie znakowe. Zatem mamy aż cztery hierarchie klas strumieniowych: InputStream OutputStream Reader Write Strumienie bajtowe Strumienie znakowe

Klasy przetwarzające Rodzaj przetwarzania Strumienie znakowe Strumienie bajtowe Buforowanie BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream Filtrowanie* FilterReader FilterWriter FilterInputStream FilterOutputStream Konwersja bajtów-znaki InputStreamReader OutputStreamWriter Konkatencja SequenceInputStream Serializacja obiektów ObjectInputStream ObjectOutputStream Konwersja danych DataInputStream DataOutputStream Zliczanie danych LineNumberReader LineNumberStream Podglądanie PushbackReader PushbackInputStream Drukowanie PrintReader PrintStream

Klasa File Pakiet java.io zawiera klas File, która reprezentuje odwołanie do plików lub katalogów. Posiada ona trzy konstruktory: File (String nazwa) – odwołanie do pliku lub katalogu o podanej nazwie, może dotyczyć plików i katalogów istniejących i tych, które mogą być utworzone File ( String katalog, String plik) File (File katalog, String plik) parametry reprezentujące katalog i zawarte w nim pliki Operacje plikowe wykonuje się za pomocą metody klas File. Niektóre z nich muszą być umieszczone w bloku try…catch. File f = new File („C:\\a.txt”) ; try { f.creatNewFile(); } catch (IOException e) { System.out.println(„Błąd + e”); }

Strumienie plikowe Strumienie te są najczęściej używanym rodzajem strumieni bajtowych. Podstawowe ich klasy to FileOutputStream i FileInputStream. Wyjściowe strumienie plikowe tworzymy za pomocą konstruktora FileOutputStream(String adres_pliku) Na przykład strumień wyjściowy do zapisu utworzymy pisząc: FileOutputStream f = new FileOutputStream("a.dat"); Jeśli plik "a.dat" nie istnieje, to zostanie utworzony. W przypadku istniejącego już pliku, jego zawartość zostanie usunięta. Czasami chcemy dopisać bajty na końcu istniejącego już pliku. Używamy wtedy konstruktora dwuargumentowego: FileOutputStream f = new FileOutputStream("a.dat",true); Po utworzeniu strumienia wyjściowego umieszcza się w nim dane: f.write(x); //x - liczba całkowita od 0 do 255 Zaraz po zapisaniu ostatniego bajtu danych zamykamy strumień: f.close();

Odczytywanie bajtów danych ze strumienia przebiega podobnie: Zadeklarowanie strumienia i dowiązanie go do pliku: FileInputStream f = new FileInputStream("a.dat"); Pobranie danych za pomocą metody read(): while (true) { int x = f.read(); if (x==-1) break; System.out.print(x + " "); } Powyższa pętla odczytuje kolejne bajty danych ze strumienia reprezentowanego przez obiekt f aż do napotkania znaku końca pliku, czyli wartości -1. Zamknięcie strumienia i odłączenie go od pliku: f.close();

Przykład - FileOutputStream import java.io.*; //Zapisywanie bajtów w strumieniu public class WriteStream { public static void main(String[] args) { int[] v = {1,0,127,4,9,32,25,36,255,16}; try { FileOutputStream f = new FileOutputStream("C:\\a.dat"); for (int i=0; i<v.length; i++) { f.write(v[i]); } f.close(); catch (IOException e) { System.err.println("Błąd " + e); } // Dana jest tablica zawierająca liczby całkowite } z zakresu 0 do 255. Program zapisuje elementy } tablicy do pliku binarnego.

Przykład - FileInputStream import java.io.*; public class ReadStream { public static void main(String[] args) { try { FileInputStream f = new FileInputStream("C:\\a.dat"); while (true) { int x = f.read(); if (x==-1) break; else System.out.print(x + " "); } f.close(); catch (IOException e) { System.err.println("Błąd " + e);

Strumienie buforowane Buforowanie odczytu i zapisu danych znacznie przyspiesza działanie programu, ponieważ umożliwia transmisję większych porcji danych. Buforowanie operacji zapisu i odczytu danych odbywa się w sposób automatyczny i kod programu zmienia się nieznacznie. . Tworzymy strumień plikowy tak jak poprzednio: FileOutputStream f1 = new FileOutputStream("a.dat"); FileInputStream f2 = new FileInputStream("a.dat"); . Deklarujemy bufor i łączymy go ze strumieniem: BufferedOutputStream b1 = new BufferedOutputStream(f1); BufferedInputStream b2 = new BufferedInputStream(f2); . Od tej pory wszystkie operacje wykonujemy na buforze: b1.write(127); int x = b2.read(); b2.close(); b1.close();

Buforowany odczyt ze strumienia import java.io.*; public class ReadStream { public static void main(String[] args) { try { FileInputStream f = new FileInputStream("C:\\a.dat"); BufferedInputStream bf = new BufferedInputStream(f); while (true) { int x= bf.read(); if (x==-1) break; else System.out.print(x + " "); } bf.close(); catch (IOException e) { System.err.println("Błąd " + e);

Strumienie danych Strumienie danych umożliwiają posługiwanie się różnymi typami danych. Filtrują one połączone z nimi strumienie bajtów, pozwalając na zapis i odczyt prostych typów danych. Podstawowe klasy to: DataOutputStream i DataInputStream. Tworzenie wyjściowego strumienia danych przebiega według schematu: . Deklarujemy strumień plikowy i łączymy go z plikiem FileOutputStream f = new FileOutputStream("a.dat"); 2. Deklarujemy bufor i łączymy go ze strumieniem: BufferedOutputStream bf = new BufferedOutputStream(f); 3. Deklarujemy strumień danych i łączymy go z buforem: DataOutputStream df = new DataOutputStream(bf); 4. Zapisujemy dane do strumienia danych: df.writeDouble( 12.5 );

Przykład - DataOutputStream import java.io.*; //Zapis prostych typów danych w strumieniu public class WriteStream { public static void main(String[] args) { double[] v = {0.0, 1.2, 9.1, 2.5, 3.6, 12.4, 5.5}; try { FileOutputStream f = new FileOutputStream("C:\\a.dat"); BufferedOutputStream bf = new BufferedOutputStream(f); DataOutputStream df = new DataOutputStream(bf); for (int i=0; i<v.length; i++) { df.writeDouble(v[i]); } df.close(); } catch (IOException e) { System.err.println("Błąd " + e); } //Dana jest tablica zawierająca liczby rzeczywiste typu double. Program zapisuje elementy tablicy } do pliku binarnego.

Przykład - DataInputStream import java.io.*; //Odczytywanie wartości typu double ze strumienia public class ReadStream { public static void main(String[] args) { try { FileInputStream f = new FileInputStream("C:\\a.dat"); BufferedInputStream bf = new BufferedInputStream(f); DataInputStream df = new DataInputStream(bf); while (true) { double x = df.readDouble(); System.out.print(x + " "); } } catch (EOFException e) { df.close();} } catch (IOException e) { System.err.println("Błąd " + e);} Metoda readDouble()nie zwraca żadnej wartości, która wskazywałaby na osiągnięcie końca pliku. Wykorzystujemy więc fakt, że po napotkaniu końca pliku wystąpi wyjątek IOException.

Strumienie znakowe Reader i Writer - to klasy bazowe strumieni znakowych. Służą one do przesyłania znaków Unicode o 16-bitowych kodach. Wszystkie znakowe operacje wejścia-wyjścia powinny być wykonywane na strumieniach znakowych, które poprawnie obsługują znaki Unikodu. Przykład - strumienie FileWriter i BufferWriter: 1. Deklarujemy strumień plikowy i łączymy go z plikiem FileWriter f = new FileWriter("a.dat"); 2. Deklarujemy bufor i łączymy go ze strumieniem: BufferedWriter bf = new BufferedWriter(f); 3. Umieszczamy dane w strumieniu buforowanym: bf.write('A'); 4. Zamykamy strumień buforowany bf.close();

Zadanie Na wejściu dany jest plik tekstowy a.txt. Ułóż program, który przepisze ten plik na nowy plik o nazwie b.txt, poprzedzając kolejne wiersze ich numerami. Każdy numer powinien być oddzielony spacją od początku linii.