Strumienie w języku Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji:

Slides:



Advertisements
Podobne prezentacje
Wstęp do strumieni danych
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
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
Wprowadzenie do języka skryptowego PHP
Nguyen Hung Son Uniwersytet Warszawski
Bartosz Walter Inżynieria oprogramowania Lecture XXX JavaTM – część II Bartosz Walter
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
Gniazda komunikacji sieciowej w języku Java
Programowanie w C Wykład 3
Język ANSI C Operacje we/wy
Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)
Tablice tablica jest sekwencją elementów tego samego typu (prostego lub obiektowego) w Javie tablice są obiektami, a zmienne tablicowe przechowują referencję
Obsługa systemu wejścia-wyjścia
Efektywna transmisja plików za pomocą TCP Piotr Kasprzyk Instytut Informatyki Politechniki Śląskiej.
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.
Instytut Tele- i Radiotechniczny WARSZAWA
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ć
TABLICE C++.
Definicja pliku tekstowego Operacje wykonywane na plikach tekstowych
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ą
Obsługa systemu wejścia-wyjścia
Programowanie obiektowe – zastosowanie języka Java SE
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.
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.
XML – eXtensible Markup Language
Podstawy informatyki 2013/2014
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
Programowanie sieciowe w Javie
Kurs języka C++ – wykład 3 ( )
Systemy operacyjne (wiosna 2014)
K URS JĘZYKA C++ – WYKŁAD 7 ( ) Wyjątki.
Podstawy programowania II Wykład 3: Obsługa plików w stdio.h.
System plików.
Podstawy programowania (4)
Procesor, pamięć, przerwania, WE/WY, …
Programowanie sieciowe w Javie Michał Kuciapski
SYSTEM WEJŚCIA-WYJŚCIA W JAVIE Autor:Jakub Piasecki Data powstania: Grudzień 2003.
Programowanie sieciowe w Javie Michał Kuciapski
Pliki tekstowe – odczyt i zapis Zajęcia 11. Zapis do pliku tekstowego Prosty program pokazujący sposób zapisu do pliku tekstowego: // writing on a text.
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
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)
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Implementacja asocjacji (z atrybutami i bez) przy użyciu: referencji (kolekcji referencji) tablic asocjacyjnych przygotował: Kamil Kowalczyk.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
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ę.
Klasy wewnętrzne. Praktyka użycia interfejsów i klas wewnętrznych
Programowanie obiektowe – zastosowanie języka Java SE
Założenia projektowe Javy
BYDGOSKI FESTIWAL NAUKI
Programowanie w Javie 1 Dr Robert Kowalczyk
Projekt Zespołowy w Javie
Zapis prezentacji:

Strumienie w języku Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji: – Szkolenie finansowane ze środków Europejskiego Funduszu Społecznego (75%) i budżetu państwa (25%) w ramach Zintegrowanego Programu Operacyjnego Rozwoju Regionalnego

Wprowadzenie  Podstawowy mechanizm wejścia-wyjścia znajduje się w Javie w pakiecie java.io.*  Obejmuje następujące obszary funkcjonalne  reprezentacja plików i katalogów  klasy odczytujące i zapisujące dane do plików  obsługa wyjątków związanych z wejściem-wyjściem

Klasa java.io.File  Obiekty klasy java.io.File reprezentują ścieżkę do pliku albo katalogu (niezależnie od tego, czy one istnieją)  Stanowią one punkt wejścia dla wszystkich operacji zapisu i odczytu danych, ale za ich pomocą nie można bezpośrednio dokonywać tych czynności File plik = new File("c:/dane.txt"); File katalog = new File("c:/moje dokumenty"); File plik2 = new File(katalog, "nowy plik.txt")

Wybrane metody klasy java.io.File String getName() – zwraca nazwę pliku String getAbsolutePath() – zwraca pełną ścieżkę pliku boolean exists() – czy plik istnieje? boolean canWrite() – możliwość zapisu boolean canRead() – możliwość czytania boolean isFile() – czy jest plikiem? boolean isDirectory() – czy jest katalogiem int length() – rozmiar pliku File plik = new File("c:/moje dokumenty/plik.txt");

Wybrane metody klasy java.io.File String[] list() – zwraca tablicę z nazwami plików znajdujących się w katalogu boolean renameTo(File nowy) – zmiana nazwy boolean mkdirs() – utworzenie hierarchii katalogów opisanych w konstruktorze boolean delete() – kasowanie pliku boolean createNewFile() – utworzenie nowego pliku File plik = new File("c:/moje dokumenty/plik.txt");

Klasa java.io.File - przykład File katalog1 = new File("c:/katalog/katalog1"); File katalog2 = new File("c:/katalog/katalog2"); // tworzymy katalog katalog1.mkdirs(); // zmieniamy jego nazwę katalog1.renameTo(katalog2);

Czym są strumienie? Alamakota... strumień danych  W Javie mechanizm wejścia-wyjścia opiera się na pojęciu strumienia (ang. stream )  Strumień to tor komunikacyjny pomiędzy dowolnym źródłem i przeznaczeniem danych. Zasadniczo strumienie są jednokierunkowe, tzn. z jednej strony przyjmują dane (można do nich zapisać), a z drugiej wysyłają (można z nich odczytać)

Strumień wejściowy źródło Alamakota... program strumień danych odczyt zapis Czytaj.java

Strumień wyjściowy program Alamakota... przeznaczenie strumień danych zapis odczyt Pisz.java

Strumienie w Javie  Ze względu na rodzaj przetwarzanych danych strumienie w Javie dzielą się na  strumienie znakowe, służące do przesyłania znaków Unicode  strumienie binarne, służące do przesyłania dowolnych bajtów  Cykl życia strumienia składa się z trzech faz: utworzenia, odczytu/zapisu, zamknięcia strumieńznakowybinarny wejściowy java.io.Readerjava.io.InputStream wyjściowy java.io.Writerjava.io.OutputStream

Znakowe strumienie plikowe  Służą do przesyłania znaków w standardzie Unicode o 16-bitowych kodach  Mogą odczytywać (klasa FileReader ) lub zapisywać (klasa FileWriter ) pojedyncze znaki  Często wewnętrznie obsługują przekodowanie znaków związane z niestandardowymi alfabetami prosty strumień plik na dysku odczyt/zapis danych na dysku odczyt/zapis pojedynczych znaków

Odczyt z pliku tekstowego  Strumień FileReader odczytuje ze strumienia znakowego otwartego w pliku pojedyncze znaki  Wybrane metody:  int read() – odczyt jednego znaku (liczby int )  int read(char[] blok) – odczyt tablicy znaków  void close() – zamknięcie strumienia FileReader plik = new FileReader("plikwe.txt"); char znak; do { znak = (char) plik.read(); } while (znak != -1); plik.close();

Zapis do pliku tekstowego  Strumień FileWriter zapisuje do strumienia znakowego otwartego w pliku pojedyncze znaki  Wybrane metody  void write(int znak) – zapis jednego znaku  void write(char[] blok) – zapis tablicy znaków  void write(String napis) – zapis napisu  void append(char znak) – dołączenie znaku na końcu pliku  void flush() – opróżnienie strumienia  void close() – zamknięcie strumienia FileWriter plik = new FileWriter ("plik.wy"); //utworz. plik.write('A'); // zapis do strumienia plik.close(); // zamknięcie strumienia

Buforowanie  Bezpośredni odczyt i zapis pojedynczych znaków jest nieefektywny (przykład: odczytaj znaków w pętli)  Z pomocą przychodzą strumienie buforujące, które operują na innych, prostszych strumieniach i posiadają możliwość buforowania danych, aby można było przetwarzać większe ich porcje prosty strumień plik na dysku strumień buforujący odczyt/zapis danych na dysku odczyt/zapis pojedynczych znaków odczyt/zapis bloków danych

Buforowanie - przykład public class Kopiowanie { public static void main(String[] args) { try { FileReader we = new FileReader("C:/plik1.txt"); BufferedReader buforWe = new BufferedReader(we); FileWriter wy = new FileWriter("C:/plik2.txt"); BufferedWriter buforWy = new BufferedWriter(wy); String linia; while ((linia = buforWe.readLine()) != null) { buforWy.write(linia); } buforWe.close(); buforWy.close(); } catch (IOException ex) { System.err.println("Błąd: " + e); } }

Binarne strumienie plikowe  Binarne strumienie służą do odczytu (klasa FileInputStream) i zapisu (klasa FileOutputStream) danych binarnych. Podstawową jednostką zapisu jest bajt (8 bitów).  W strumieniach binarnych, inaczej niż w tekstowych, nigdy nie dochodzi do przekodowania danych. Są one zapisywane dokładnie w takiej postaci, w jakiej je przekazano. FileInputStream in = new FileInputStream("plik.we"); FileOutputStream out = new FileOutputStream("plik.wy");

Odczyt z pliku binarnego  Strumień FileInputStream odczytuje ze strumienia binarnego otwartego w pliku pojedyncze bajty  Wybrane metody:  int read() – odczyt jednego znaku (liczby int )  int read(byte[] blok) – odczyt tablicy bajtów  void close() – zamknięcie strumienia FileInputStream plik = new FileInputStream("plikwe.dat"); int bajt; do { bajt = plik.read(); } while (bajt != -1); // odczyt dopóki nie wystąpi koniec pliku plik.close(); // zamknięcie strumienia

Odczyt z pliku binarnego public class OdczytBinarny { public static void main(String[] args) { try { FileInputStream we = new FileInputStream("x"); byte bajt; while ((bajt = we.read()) != -1 { //... } strumienWe.close(); } catch (IOException ex) { System.err.println("Błąd: " + e); }

Zapis do pliku binarnego  Strumień FileOutputStream zapisuje do strumienia binarnego otwartego w pliku pojedyncze bajty  Wybrane metody  void write(int znak) – zapis jednego bajtu  void write(byte[] blok) – zapis tablicy bajtów  void flush() – opróżnienie strumienia  void close() – zamknięcie strumienia FileWriter plik = new FileWriter ("plikwy.dat"); plik.write('A'); // zapisany zostaje kod znaku 'A' plik.close();

Zapis do pliku binarnego public class ZapisBinarny { public static void main(String[] args) { try { FileOuputStream wy = new FileOutputStream("plik.wy"); for (int i = 0; i < 255; i++) { strumienWy.write(i); } strumienWy.close(); } catch (IOException ex) { System.err.println("Błąd: " + e); }

Buforowanie dostępu do pliku binarnego  Podobnie jak w przypadku strumieni znakowych, strumienie binarne też mogą być buforowane  Odpowiadają za to klasy BufferedInputStream i BufferedOutputStream  Zapis buforowany ( BufferedOutputStream )  int write(byte[] bufor, int poczatek, int długosc)  Odczyt buforowany ( BufferedInputStream )  int read(byte[] bufor, int poczatek, int długosc) while ((int liczba = strumien.read(bufor, 0, bufor.length) ) != -1) liczba faktycznie odczytanych bajtów bufor, jego początek i długość -1 oznacza koniec pliku

Buforowany odczyt - przykład public class BuforOdczytBinarny { public static void main(String[] args) { try { FileInputStream we = new FileOutputStream("pl.wy"); BufferedInputStream buforWe = new BufferedInputStream (we); char[] bufor = new char[1024]; while ((int liczba = buforWe.read(bufor, 0, bufor.length)) != -1) { // tu można coś zrobić z zawartością bufora } buforWe.close(); } catch (IOException ex) { System.err.println("Błąd: " + e); }

Standardowe wejście-wyjście  Pojęcie "standardowe wejście-wyjście" odnosi się do koncepcji wywodzących się z Unixa  Każdy program może wczytywać dane wejściowe ze standardowego wejścia oraz zapisywać dane wyjściowe na standardowe wyjście i standardowe wyjście błędów  Strumienie System.in, System.out,System.err są obiektami i można z nich korzystać tak jak ze strumieni reprezentujących pliki. BufferedReader reader = new BufferedReader( new InputStreamReader(System.in));

Wyjątek IOException  Niemal wszystkie operacje wejścia-wyjścia zgłaszają wyjątek IOException, dlatego wykonanie większości z nich wymaga objęcia w klauzulę try...catch