SYSTEM WEJŚCIA-WYJŚCIA W JAVIE Autor:Jakub Piasecki Data powstania: Grudzień 2003.

Slides:



Advertisements
Podobne prezentacje
Wstęp do strumieni danych
Advertisements

Programowanie wizualne PW – LAB6 Wojciech Pieprzyca.
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Programowanie obiektowe PO PO - LAB 6 Wojciech Pieprzyca.
Wzorce.
Programowanie w języku Visual Basic
Sieci komputerowe Usługi sieciowe Piotr Górczyński 27/09/2002.
Wprowadzenie do języka skryptowego PHP
1 Linux jako system wielozadaniowy i wielodostępny.
Autor Roman Jędras Prowadzący: dr inż. Antoni Izworski Przedmiot:
Projektowanie i implementacja programów obsługujących gniazdka Wykład II Zbigniew Brożbar Paweł Baranowski.
Internet Communication Engine
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
Magistrala & mostki PN/PD
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
Budowa, przeglądanie i modyfikacja
Autor: Piotr Wojtowicz Opiekun naukowy referatu: dr inż. Cezary Worek
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.
Rozwój aplikacji przy wykorzystaniu ASP.NET
Instytut Tele- i Radiotechniczny WARSZAWA
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
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ą
Sieci komputerowe.
Rejestr systemu Windows
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.
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
JAVA.
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,
Sieciowe systemy operacyjne - UNIX
Podstawy informatyki 2013/2014
Kostyantyn Doronovych, 79129, sr1640 Łukasz Marciniak, 79166, sr1640
MICROSOFT Access TWORZENIE MAKR
Etapy uruchamiania systemu Pliki konfiguracyjne
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
Aplikacje TCP i UDP. Łukasz Zieliński
System plików.
Procesor, pamięć, przerwania, WE/WY, …
Microsoft Disk Operating System
Piotr Czapiewski Wydział Informatyki ZUT. Web Services Description Language.
Iga Lewandowska I EMII MU
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Strumienie w języku Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji:
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
Zaawansowane technologie Javy Wykład 4 (16 marca 2017)
Piotr Kawałek , Mateusz Śliwowski
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
Typy wyliczeniowe, kolekcje
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Sieci komputerowe Usługi sieciowe 27/09/2002.
Programowanie obiektowe – zastosowanie języka Java SE
Aplikacje i usługi internetowe
Założenia projektowe Javy
Programowanie w Javie 1 Dr Robert Kowalczyk
PGO Przeciążanie metod i konstruktorów
Zapis prezentacji:

SYSTEM WEJŚCIA-WYJŚCIA W JAVIE Autor:Jakub Piasecki Data powstania: Grudzień 2003

File- Klasa  Reprezentuje ona albo nazwę konkretnego pliku, albo nazwę zbioru plików czyli katalogu Java traktuje katalogi i pliki w podobny sposób Korzystamy z biblioteki java.io.*; String list()- metoda która w przypadku katalogów zwraca tablice z nazwami plików znajdujących się w danym katalogu

Przykładowy kod (katalogi I) Wypisanie zawartości katalogu: File sciezka = new File("Folder"); String[] lista = sciezka.list(); for(int i=0; i<lista.length; i++) System.out.println(lista[i]);

File- metody String getname()- zwraca nazwę pliku String getpath()- zwraca ścieżkę pliku String getAbsolutePath()- zwraca pełną ścieżkę pliku String getParent()- zwraca ścieżkę nadrzędną boolean exists()– czy istnieje boolean canWrite()- możliwość zapisu boolean canRead()- możliwość czytania boolean isFile()- czy plik boolean isDirectory()- czy katalog

File- metody c.d. boolean renameTo(File newName)- zmiana nazwy boolean mkdirs()- tworzenie ścieżki o dowolnej złożonosci boolean delete()- kasowanie pliku long length()– długość pliku long lastModified()– ostania modyfikacja

Przykładowy kod (katalogi II) Tworzenie katalogu i zmiana jego nazwy File sciezka= new File("c:/katalog1"); File nowaSciezka=new File("c:/katlog2"); //tworzymy katalog sciezka.mkdirs(); //zmieniamy jego nazwę sciezka.renameTo(nowaSciezka);

I/O- informacje podstawowe Java wykorzystuje pojęcie strumienia (ang. stream) Strumień- reprezentacja dowolnego źródła danych, jako obiektu zdolnego do wysyłania i odbierania porcji danych W Javie 1.1 zaszły istotne zmiany w stosunku do wcześniejszych wersji (cel: obsługa standardu Unicode) Rozróżniamy dwa rodzaje strumieni: tekstowe i binarne Do obsługi tekstowych korzystamy z hierarchii klas Reader i Writer Do obsługi binarnych korzystamy z hierarchii klas InputStream i OutputStream

Reader i Writer Używamy do obsługi strumieni tekstowych Powstały w celu obsługi standardu Unicode Podział na dwie podstawowe klasy Reader oraz Writer, które posiadają metody read() i write() pozwalające na operacje czytania i zapisu bajtu lub tablicy bajtów(to samo InputStream i OutputStream ) Nie korzystamy z tych metod bezpośrednio. Wykorzystują je klasy dziedziczące, które służą do obsługi konkretnych źródeł.

Reader - możliwe źródła Tablica bajtów Obiekt String Plik Potok Sekwencja Strumieni Inne źródła(np. połączenia internetowe)

Reader- Użyteczne Podklasy KlasaDziałanieArgument Konstruktora CharArrayReader Odczyt bajtów z tablicyTablica, z której czytamy bajty StringReader Konwertuje String do obiektu typu Reader Obiekt typu String FileReader Odczyt informacji z plikuObiekt File FilterReader Dostarcza interfejs dla dekoratorów, poszerzających możliwości klas Reader Obiekt Reader

Reader- Dekoratory klas Klasy Reader używamy w połączeniu z dekoratorami tworząc użyteczny interfejs Najczęściej stosowany to: BufferedReader- używamy go aby zapobiec fizycznemu odczytowi za każdym żądaniem kolejnych danych. Jako argument przyjmuje obiekt typu Reader. Zastosowanie go znacznie zwiększa wydajność

Przykładowy kod (czytanie z pliku)(1/2) Czytanie z pliku i wyświetlenie na ekranie Konstrukcja z zagnieżdżoną instrukcją try pozwala na uniknięcie błędów, szczególnie wyróżnione w przykładzie zamknięcie strumienia niezależnie od błędów występujących podczas przetwarzania W celu większej przejrzystości w kolejnych przykładach strumienie będą zamykane w głównym bloku try. Należy jednak pamiętać, że przy pisaniu programu należy zastosować pełną konstrukcję. kod

Przykładowy kod (czytanie z pliku)(2/2) try{ //tworzymy strumień Reader z obiektu File i dekorujemy go //za pomocą BufferedReader BufferedReader in = new BufferedReader(new FileReader(plik)); String s; //czytamy kolejne linie pliku za pomocą readline() try{ while((s=in.readLine())!=null) System.out.println(s); }catch(IOException e1){ System.err.println("Błąd przy przetwarzaniu"); }finally{ in.close(); //zamknięcie strumienia!!! } }catch(FileNotFoundException e2{ System.err.println("Brak pliku:"+ plik); }

Writer- Użyteczne Podklasy KlasaDziałanieArgument Konstruktora CharArrayWriter Tworzy bufor w pamięci w którym umieszczone są dane wysyłane do strumienia Opcjonalnie rozmiar bufora FileWriter Wysyła informacje do pliku String reprezentujący nazwę pliku lub obiekt File

Writer- Zapis do strumieni PrintWriter - za pomocą tej klasy możemy zrealizować zapis danych danych w formie nadającej się do przeglądania. Posiada ona dwie ważne metody print() i println() BufferedWriter - za pomocą tego dekoratora możemy zwiększyć wydajność zapisu. Jako argument przyjmuje on obiekt typu Writer

Przykładowy kod (zapis do pliku- prawidłowe zamknięcie strumienia) Odczytanie danych z klasy String i zapis do pliku File plik = new File("test1.txt"); String s="Pierwsza Linia \nDruga Linia \nKoniec"; String s2; BufferedReader in = new BufferedReader(new StringReader(s)); try{ PrintWriter out = new PrintWriter( new BufferedWriter(new FileWriter(plik))); //czytamy ze strumienia in i zapisujemy do strumienia out while((s2=in.readLine())!=null) out.println(s2); out.close(); }catch(IOException e1){} }

InputStream i OutputStream Spełniały role głównych klas I/O zanim powstały klasy Reader i Writer w Javie1.1 Posiadają podklasy analogiczne do podklas Reader i Writer, których nazwy w miejscu wyrazów „ Reader” i „ Writer” mają wyrazy „ InputStream” i „OutputStream” np. FileInputStream zamiast FileReader Wciąż używa się niektórych podklas do operacji zorientowanych bajtowo. Szczególnie DataInputStream i DataOutputStream Istnieje możliwość konwersji obiektów tego typu do obiektów Reader i Writer za pomocą adapterów InputStreamReader oraz OutputStreamWriter

DataInputStream i DataOutputStream Są podklasami InputStream i OutputStream DataOutputStream umożliwia zapis i danych w postaci która może być odczytana jedynie za pomocą DataInputStream Umożliwiają odczyt i zapis danych podstawowych niezależnie od platformy systemowej Stosują metody typu: readFloat(), readDouble(), writeInt() Przy wczytywaniu danych trzeba znać ich kolejność w strumieniu writeUTF(), readUTF()- metody stosowane do zapisu i odczytu obiektów String

Przykładowy kod (zapis do pliku i odzyskiwanie danych) zapis do pliku i odzyskiwanie danych try{ DataOutputStream out = new DataOutputStream(new FileOutputStream("Data.dat")); out.writeDouble( ); out.writeUTF("to jest obiekt string"); out.close(); //to był zapis, teraz odczyt DataInputStream in = new DataInputStream(new FileInputStream("Data.dat")); System.out.println(in.readDouble()); System.out.println(in.readUTF()); in.close(); }catch(IOException e1){}; }

Standardowe wejście-wyjście  Termin odnosi się do koncepcji wywodzących się z Unixa, stosowanej potem w innych systemach operacyjnych  Dane wejściowe mogą pochodzić ze standardowego wejścia, a dane wyjściowe program może wysyłać na standardowe wyjście i standardowe wyjście błędów  Wyjście jednego programu może być wejściem drugiego  System.in, System.out, System.err- obiekty  Obiekt System.out jest standardowo opakowany w obiekt Printstream  Dwa pozostałe obiekty należy samemu opakować w celu użycia  System.in jest obiektem hierarchii InputStream dlatego aby skonwertować go do Reader używamy adaptera InputStreamReader

Przykładowy kod (czytanie ze standardowego wejścia)  czytanie danych ze standardowego wejścia i zapis do obiektu String try{ //konwertujemy System.in do obiektu Reader InputStreamReader ir= new InputStreamReader(System.in); BufferedReader in = new BufferedReader(ir); String s1,s2; //wprowadzenie pustego wiersza kończy pętlę while((s2=in.readLine())!=null && s2.length()!=0) s1+=s2; System.out.println(s1); }catch(IOException e1){}

Przekierowanie Standardowego wejścia-wyjścia Używamy np. kiedy chcemy przekierować do pliku dane które normalnie byłyby skierowane na konsole setIn(InputStream), setOut(PrintStream),setErr(PrintStream)- metody klasy System służące do przekierowań Operacje przekierowań to operacje bajtowe dlatego używamy klas klas Input i OutputStream

Przykładowy kod (przekierowanie standardowego wejścia do pliku) przekierowanie standardowego wyjścia do pliku try{ PrintStream mojeOut= new PrintStream( new BufferedOutputStream( new FileOutputStream("test.txt"))); System.setOut(mojeOut); System.out.println("To będzie zapisane w pliku"); mojeOut.close(); System.setOut(System.out); } catch(IOException e1){}

RandomAccesFile- Klasa Jest używana do obsługi plików zawierających rekordy o znanym rozmiarze Jest to zupełnie oddzielna klasa nie korzysta z funkcji Input i OutputStream Swobodny dostęp- możemy poruszać się w pliku „do przodu” i „w tył” seek()- metoda pozwalająca na przemieszczenie się do danego miejsca length()- maksymalna długość pliku Jako drugi argument konstruktora przyjmuje tryb w jakim otieramy plik "rw"- zapis i odczyt lub "r"- tylko zapis

Przykładowy kod (odczyt z plików o swobodnym dostępie)  Zapis i odczyt z plików o swobodnym dostępie try{ RandomAccessFile rf = new RandomAccessFile("test.dat","rw"); for(int i=0; i<10; i++) rf.writeInt(i); rf.close(); rf = new RandomAccessFile("test.dat","rw"); rf.seek(4*5); //writeInt wstawi 13 w miejsce 5 rf.writeInt(13); rf.close(); rf = new RandomAccessFile("test.dat","rw"); for(int i=0; i<10; i++) System.out.println(rf.readInt()); rf.close(); }catch(IOException e1){}; }

Properties Mogą być użyte do zapisywania i wczytywania ustawień przy każdym uruchomieniu programu Properties- obiekt składa się z par klucz/wartość zapisanych w postaci String Możemy skierować zawartość obiektu do strumienia(pociąga to za sobą możliwość zapisu do pliku) Możemy do obiektu Properties skierować zawartość strumienia(wczytanie z pliku) Wygodny system umożliwiający w prosty sposób konfigurację ustawień programu Poprzez prostą modyfikację wartości par klucz/wartość w pliku możemy łatwo zmienić konfigurację

Properties -metody load(InputStream in)- wczytanie zawartości ze strumienia store(OutputStream out,String nagłowek)- zapis wartości do strumienia dodawany jest nagłówek getProperty(String klucz)- zwraca wartość dla danego klucza setProperty(String klucz,String wartość)- ustawienie wartości dla danego klucza Możliwe jest stworzenie wartości domyślnych, które możemy wczytać w razie braku wartości dla danego klucza w danym obiekcie Properties (odsyłam do dokumentacji Javy)

Przykładowy kod (ustawienie wartości Properties zapis i wczytanie z pliku) String userLogin; Properties props1= new Properties(); props1.setProperty("login","piasecki"); props1.setProperty("nr_grupy","5"); try{ FileOutputStream out =new FileOutputStream("konfig.txt"); props1.store(out,"--Plik Konfiguracyjny--"); //zapis wartości out.close(); }catch(IOException e){} Properties props2= new Properties(); try{ FileInputStream in =new FileInputStream("konfig.txt"); props2.load(in); //wczytanie wartości in.close(); }catch(IOException e){} userLogin=props2.getProperty("login"); System.out.println("User Login: "+userLogin);

Przykładowy plik konfiguracyjny  Zawartość: #--Plik Konfiguracyjny-- #Thu Dec 04 21:10:26 CET 2003 login=piasecki nr_grupy=5

System Properties Zastępują pomysł zmiennych środowiskowych specyficznych dla każdej platformy na której uruchamiamy programy Java System.getProperties()- metoda zwraca obiekt Properties getProperty()- zwraca String reprezentujący wartość danej właściwości (ang. property) propertyNames()- wywołana na obiekcie typu Properties zwraca typ wyliczeniowy

Przykładowy kod (użycie SystemPropeties )  Wypisanie na ekran wartości SystemProperties Properties props = System.getProperties(); Enumeration propNazwy =props.propertyNames(); while (propNazwy.hasMoreElements()){ String propNazwa =(String)propNazwy.nextElement(); String property =(String)props.getProperty(propNazwa); System.out.println("Property "+propNazwa+": "+property); }

Properties- wynik  Niektóre properties uzyskane za pomocą propgramu Property java.runtime.name: Java(TM) 2 Runtime Environment, Standard Edition Property sun.boot.library.path: C:\Program Files\JavaSoft\JRE\1.3.1_09\bin Property java.vm.version: 1.3.1_09-b03 Property java.vm.vendor: Sun Microsystems Inc. Property java.vendor.url: Property java.vm.specification.name: Java Virtual Machine Specification Property user.dir: E:\eclipse-SDK win32\eclipse\workspace\Pliki Property java.runtime.version: 1.3.1_09-b03 Property java.io.tmpdir: C:\DOCUME~1\Kuba\USTAWI~1\Temp\ Property java.vm.specification.vendor: Sun Microsystems Inc. Property os.name: Windows XP Property java.library.path: C:\Program Files\JavaSoft\JRE\1.3.1_09\bin;.;C:\WINDOWS\System32;C:\WINDOWS;C:\WINDOWS\sy stem32;C:\WINDOWS;C:\WINDOWS\System32\Wbem Property java.specification.name: Java Platform API Specification Property java.class.version: 47.0 Property os.version: 5.1 Property user.home: C:\Documents and Settings\Kuba Property java.home: C:\Program Files\JavaSoft\JRE\1.3.1_09 Property user.region: PL Property sun.cpu.isalist: pentium i486 i386

Sockets Socket- jest jedną z „końcówek” dwustronnej komunikacji pomiędzy dwoma programami działającymi w sieci. Jest związany z numerem portu i IP komputera więc warstwa TCP może zidentyfikować aplikację do której przesyłane są dane Używamy ich kiedy chcemy stworzyć model komunikacji pomiędzy dwoma programami w sieci np. aplikację typu klient- serwer po każdej stronie znajduje się soket, do którego klient i serwer mogą zapisywać i z którego mogą odczytywać informacje Biblioteka java.net dostarcza dwie klasy Socket i ServerSocket - które są odpowiedzialne za połączenie po stronie klienta i serwera Można z niego czytać jak ze strumienia

Wykorzystane Materiały „Thinking in Java” Bruce Eckel „The Java TM Tutorial” Copyright Sun Microsystems „ Java TM Programming Language” Copyright 2002 Sun Microsystems

Koniec