Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni przez sieć - obiekty URL

Podobne dokumenty
Wykład 2. Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni poprzez sieć - obiekty URL

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

Języki i metody programowania Java INF302W Wykład 4

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Wykład 7 Tworzenie łącz w apletach, wątki, serializacja obiektów, gniazda

StringTokenizer bon = new StringTokenizer(bufor.readLine());

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.

Bezpieczne uruchamianie apletów wg

Strumienie i serializacja

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Podstawy otwartych języków programowania Wyjątki i strumienie I/O

Podstawy i języki programowania

Wykład 4: Wejście/wyjście: strumienie Java

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Strumienie, pliki. Sortowanie. Wyjątki.

Biblioteki wejścia/wyjścia. Strumienie we/wy (I/O)

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

Programowanie obiektowe

Aplikacja wielowątkowa prosty komunikator

Strumienie, pliki. Sortowanie. Wyjątki.

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez:

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

Wykład 10: Wejście i Wyjście

KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Wykład 2: Podstawy Języka

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja

Programowanie sieciowe

K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Rozdział 7 Strumienie, operacje wejścia-wyjścia

Programowanie obiektowe

MATERIAŁY POMOCNICZE DO ĆWICZENIA 3 Klasy i obiekty; atrybuty i metody

Programowanie Obiektowe (Java)

Aplikacja wielow tkowa prosty komunikator

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

Język JAVA podstawy. Wykład 6, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd.

Platformy Programistyczne Zagadnienia sieciowe i wątki

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Funkcje zawarte w bibliotece < io.h >

Programowanie w języku Java WYKŁAD

Programowanie obiektowe

Programowane refleksyjne i serializacja

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Funkcje zawarte w bibliotece < io.h >

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Programowanie obiektowe

MATERIAŁY POMOCNICZE DO ĆWICZENIA 1 Aplikacja w języku Java. Pakiety i biblioteki Javy. Kompilacja i wykonanie programu Javy

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Java programowanie w sieci. java.net RMI

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

JAVA I SIECI. MATERIAŁY:

Języki i Techniki Programowania II. Wykład 6. Wejście/Wyjście

Wykład 4. Tablice. Pliki

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Przygotował: Jacek Sroka 1. Java SE. Strumienie

System obsªugi wej±cia i wyj±cia.

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Programowanie 3 - Funkcje, pliki i klasy

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

dr Krzysztof Podlaski

Podejście obiektowe. Tablice (1) obiektów

Java. Programowanie Obiektowe Mateusz Cicheński

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Programowanie w Internecie. Java

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Schemat dla UDP. = możliwe zablokowanie aplikacji KLIENT SERWER. s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Przykład. Podaj nazwę domenową hosta a odczytaj jego adres IP, lub odwrotnie:

Java: Graficzne interfejsy użytkownika

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Programowanie obiektowe

Przykłady interfejsu TCP i UDP w Javie

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 3

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Programowanie rozproszone w języku Java

Wprowadzenie do języka Java

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Podstawy i języki programowania

Wstęp do Java. Operacje Wejścia-Wyjścia Programowanie Wielowątkowe. dr Krzysztof Podlaski. Wydział Fizyki i Informatyki Stosowanej

Operacje wejścia/wyjścia (odsłona druga) - pliki

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie w językach

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Programowanie obiektowe

Transkrypt:

Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni przez sieć - obiekty URL Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

1. Strumienie tekstowe wprowadzania danych z klawiatury 1) Należy utworzyć obiekt (np. typu InputStreamReader), powiązany ze źródłem danych (np. System.in) InputStreamReader wejscie = new InputStreamReader( System.in ); 2) W celu buforowania znaków pochodzących z obiektu powiązanego ze źródłem danych np. typu InputStreamReader należy utworzyć obiekt klasy BufferedReader BufferedReader bufor = new BufferedReader( wejscie ); lub BufferedReader bufor = new BufferedReader( wejscie, int ); //int-rozmiar bufora 3) Znaki mogą być odczytywane metodami obiektu buforującego: int read() np. int dana = bufor.read() 4) Całe ciągi znaków mogą być odczytane za pomocą: int read(char[] cbuf, int off, int len) metoda, która czyta do tablicy cbuf od indeksu off liczbę len znaków i zwraca przez return liczbę faktycznie odczytanych znaków 5) Całe wiersze mogą być odczytywane za pomocą metody obiektu buforującego: String readline() np. String dana = bufor.readline(), która czyta łańcuch typu String lub jego wartość null, gdy będzie osiągnięty koniec łańcucha (czyli koniec linii oznaczony znakami np.: \n, \r ) 6) Analiza odczytanego łańcucha może być przeprowadzona za pomocą obiektu klasy typu StringTokenizer StringTokenizer bon = new StringTokenizer(bufor.readLine()); 7) Innym sposobem jest analiza odczytanego łańcucha typu String za pomocą metod klasy String Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 2

import java.io.*; import java.util.*; public class WE WY //plik WEWY.java //wejściowy strumień tekstowy odczytuje strumien stdin (System.in) static InputStreamReader wejscie = new InputStreamReader( System.in ); //bufor klasa odczytuje wejściowy strumień znakowy wejscie i przechowuje odczytywane znaki w buforze static BufferedReader bufor = new BufferedReader( wejscie ); StringTokenizer bon; //klasa do analizy składniowej jednostek lerksykalnych tzw. Leksemów (tokens) pobieranych metodą nexttoken() boolean weboolean() try bon = new StringTokenizer(bufor.readLine()); return new Boolean(bon.nextToken()).booleanValue(); catch (IOException e) System.err.println("Blad IO Boolean "+e); return false; catch (Exception e) System.err.println( "Blad Boolean "+e); return false; String westring() try return bufor.readline(); catch (IOException e) System.err.println("Blad IO String"); return ""; catch (Exception e) System.err.println( "Blad String "+e); return ""; Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 3

char wechar() try String s = bufor.readline(); return s.charat(0); catch (IOException e) System.err.println("Blad IO char "+e); return 0; catch (Exception e) System.err.println( "Blad char "+e); return 0; byte webyte() try bon = new StringTokenizer(bufor.readLine()); return Byte.parseByte(bon.nextToken()); catch (IOException e) System.err.println("Blad IO byte "+e); return 0; catch (NumberFormatException e) System.err.println( "Blad formatu byte "+e); return 0; catch (Exception e) System.err.println( "Blad formatu byte "+e); return 0; Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 4

short weshort() try bon = new StringTokenizer(bufor.readLine()); return Short.parseShort(bon.nextToken()); catch (IOException e) System.err.println("Blad IO short: "+e); return 0; catch (NumberFormatException e) System.err.println( "Blad formatu short "+e); return 0; catch (Exception e) System.err.println( "Blad formatu short "+e); return 0; int weint() try bon = new StringTokenizer(bufor.readLine()); return Integer.parseInt(bon.nextToken()); catch (IOException e) System.err.println("Blad IO int "+e); return 0; catch (NumberFormatException e) System.err.println( "Blad formatu int "+e); return 0; catch (Exception e) System.err.println( "Blad formatu int "+e); return 0; long welong() try bon = new StringTokenizer(bufor.readLine()); return Long.parseLong(bon.nextToken()); catch (IOException e) System.err.println("Blad IO "+e); return 0L; catch (NumberFormatException e) System.err.println( "Blad formatu long "+e); return 0L; catch (Exception e) System.err.println( "Blad formatu long "+e); return 0L; Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 5

float wefloat() try bon = new StringTokenizer(bufor.readLine()); return new Float(bon.nextToken()).floatValue(); catch (IOException e) System.err.println("Blad IO float "+e); return 0.0F; catch (NumberFormatException e) System.err.println( "Blad formatu float "+e); return 0.0F; catch (Exception e) System.err.println( "Blad formatu float "+e); return 0.0F; double wedouble() try bon = new StringTokenizer(bufor.readLine()); return new Double(bon.nextToken()).doubleValue(); catch (IOException e) System.err.println("Blad IO double "+e); return 0.0; catch (NumberFormatException e) System.err.println( "Blad formatu double "+e); return 0; catch (Exception e) System.err.println( "Blad formatu double "+e); return 0.0; Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 6

public static void main (String args[]) WE we = new WE(); WEWY we = new WEWY(); System.out.print("Podaj char: "); System.out.println(we.weChar()); System.out.print("Podaj String: "); System.out.println(we.weString()); System.out.print("Podaj boolean: "); System.out.println(we.weBoolean()); System.out.print("Podaj byte: "); System.out.println(we.weByte()); System.out.print("Podaj short: "); System.out.println(we.weShort()); System.out.print("Podaj int: "); System.out.println(we.weInt()); System.out.print("Podaj long: "); System.out.println(we.weLong()); System.out.print("Podaj float: "); System.out.println(we.weFloat()); System.out.print("Podaj double: "); System.out.println(we.weDouble()); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 7

2. Strumienie tekstowe plikowe Procedura korzystania ze strumieni tekstowych buforowanych powiązanych z plikami tekstowymi Aby utworzyć plik: 1) Należy utworzyć obiekt (np. typu FileWriter), powiązany ze plikiem danych tekstowych (np. "plik2.txt"); FileWriter plik = new FileWriter("plik2.txt"); 2) W celu buforowania znaków pochodzących z obiektu powiązanego ze źródłem danych np. typu FileWriter należy utworzyć obiekt klasy BufferedWriter BufferedWriter bufor = new BufferedWriter( plik ); 3) Znaki mogą być zapisywane do pliku za pomocą metody bufora: void write(int c) 4) Całe ciągi znaków mogą być zapisywane do pliku za pomocą metody bufora: void write(char[] cbuf, int off, int len) metoda, która czyta z tablicy cbuf od indeksu off liczbę len znaków i zapisuje do pliku 5) Część łańcucha można zapisać do pliku za pomocą metody bufora: void write(string str, int off, int len) metoda, która czyta z łańcucha str od indeksu off liczbę len znaków i zapisuje do pliku Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 8

Aby odczytać plik: 6) Należy utworzyć obiekt (np. typu FileReader), powiązany ze plikiem danych tekstowych (np. "plik1.txt"); FileReader plik = new FileReader("plik2.txt"); 7) W celu buforowania znaków pochodzących z obiektu powiązanego ze źródłem danych np. typu FileWriter należy utworzyć obiekt klasy BufferedReader BufferedReader bufor = new BufferedReader( plik ); 8) Znaki mogą być odczytywane metodą bufora: int read (); np. int dane = plik.read() 9) Całe ciągi znaków mogą być odczytane za pomocą metody bufora: int read(char[] cbuf, int off, int len) metoda, która czyta plik i zapisuje do tablicy cbuf od indeksu off liczbę len znaków i zwraca przez return liczbę faktycznie odczytanych znaków 10) Całe wiersze mogą być odczytywane za pomocą metody obiektu buforującego: String readline() np. String dana = bufor.readline(), która czyta w pliku łańcuch typu String lub jego wartość null, gdy będzie osiągnięty koniec łańcucha (czyli koniec linii oznaczony znakami np.: \n, \r ) 11) Po zapisie i odczycie bufor należy zamknąć metodą close() Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 9

import java.io.*; import java.util.*; public class WEWY5 static String westring() InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); try return bufor.readline(); catch (IOException e) System.err.println("Blad IO String"); return ""; static void Zapiszplik5() String dane="1"; try FileWriter plik = new FileWriter ("plik2.txt"); BufferedWriter bufor = new BufferedWriter (plik); while (!dane.equals("")) System.out.print("Podaj dane: "); dane=westring(); if (!dane.equals("")) bufor.write(dane, 0, dane.length()); bufor.close(); catch (IOException e) System.out.println ("Blad zapisu pliku tekstowego"+e); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 10

static void Odczytajplik5() String dane="0"; try FileReader plik = new FileReader ("plik2.txt"); BufferedReader bufor = new BufferedReader (plik); dane=bufor.readline(); while (dane!=null) System.out.print(dane); dane=bufor.readline(); bufor.close(); System.out.println(); catch (IOException e) System.out.println ("Blad odczytu pliku tekstowego"+e); public static void main(string[] args) Zapiszplik5(); Odczytajplik5(); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 11

Wyświetlenia zawartości pliku znakowego w programie. Odczyt zawartości pliku edytorem znakowym Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 12

3. Strumienie bajtowe plikowe 3.1. Procedura korzystania ze strumieni bajtowych buforowanych powiązanych z plikami binarymi Aby utworzyć plik: 1) Należy utworzyć obiekt (np. typu FileOutputStream), powiązany ze plikiem danych binarnych (np. "plik2.dat"); FileOutputStream plik = new FileOutputStream("plik2.dat"); 2) W celu buforowania bajtów pochodzących z obiektu powiązanego ze źródłem danych np. typu FileOutputStream należy utworzyć obiekt klasy BufferedOutputStream Przykład BufferedOutputStream bufor = new BufferedOutputStream( plik ); 3) Pojedyncze bajty mogą być zapisywane do pliku za pomocą metody bufora: void write(int c) 4) Całe ciągi bajtów mogą być zapisywane do pliku za pomocą metody bufora: void write(byte[] cbuf, int off, int len) metoda, która czyta z tablicy cbuf od indeksu off liczbę len bajtów i zapisuje do pliku Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 13

Aby odczytać plik: 5) Należy utworzyć obiekt (np. typu FileInputStream), powiązany ze plikiem danych binarnych (np. "plik2.dat"); FileInputStream plik = new FileInputStream("plik2.dat"); 6) W celu buforowania bajtów pochodzących z obiektu powiązanego ze źródłem danych np. typu FileInputStream należy utworzyć obiekt klasy BufferedInputStream BufferedInputStream bufor = new BufferedInputStream (plik); 7) Pojedyncze bajty mogą być odczytywane metodą bufora: int read (); np. int dane = plik.read() 8) Całe ciągi bajtów mogą być odczytane za pomocą metody bufora: int read (byte[] cbuf, int off, int len) metoda, która czyta plik i zapisuje do tablicy cbuf od indeksu off liczbę len bajtów i zwraca przez return liczbę faktycznie odczytanych bajtów 9) Po zapisie i odczycie bufor należy zamknąć metodą close() Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 14

import java.io.*; import java.util.*; public class WEWY2 static byte webyte() InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); StringTokenizer zeton; try zeton = new StringTokenizer(bufor.readLine()); return Byte.parseByte(zeton.nextToken()); catch (IOException e) System.err.println("Blad IO byte "+e); return 0; catch (NumberFormatException e) System.err.println( "Blad formatu byte "+e); return 0; Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 15

static void Zapiszplik2() int dane=0; try FileOutputStream plik = new FileOutputStream ("plik2.dat"); BufferedOutputStream bufor = new BufferedOutputStream (plik); while (dane!=-1) System.out.print("Podaj dane: "); dane=webyte(); if (dane!=-1) bufor.write(dane); bufor.close(); catch (IOException e) System.out.println ("Blad zapisu pliku bajtowego"+e); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 16

static void Odczytajplik2() int dane=0; try FileInputStream plik = new FileInputStream ("plik2.dat"); BufferedInputStream bufor = new BufferedInputStream (plik); dane=plik.read(); while (dane!=-1) System.out.print(dane); dane=bufor.read(); System.out.println(); bufor.close(); catch (IOException e) System.out.println ("Blad odczytu pliku bajtowego"+e); public static void main(string[] args) Zapiszplik2(); Odczytajplik2(); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 17

Wprowadzanie danych do pliku binarnego i wyświetlanie jego zawartości w programie, interpretując znakowo zawartość jako liczb typu int Interpretacja znakowa binarnego zapisu liczb typu int () w kodzie dwójkowym wyświetlanie zawartości pliku w edytorze tekstowym Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 18

3.2. Procedura korzystania ze strumieni danych Aby utworzyć plik: 1) Należy utworzyć obiekt (np. typu FileOutputStream), powiązany ze plikiem danych binarnych (np. "plik3.dat"); FileOutputStream plik = new FileOutputStream("plik3.dat"); 2) W celu buforowania bajtów pochodzących z obiektu powiązanego ze źródłem danych np. typu FileOutputStream należy utworzyć obiekt klasy BufferedOutputStream BufferedOutputStream bufor = new BufferedOutputStream( plik ); 3) W celu reprezentowania danych typu boolean, byte, double, float long, short należy utworzyć strumień danych typu DataOutputStream powiązanego z obiektem buforującym typu BufferedOutputStream DataOutputStream dana= new DataOutputStream (bufor); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 19

Dalej podano metody strumienia danych do zapisu danych do pliku: 1. Pojedyncze bajty mogą być zapisywane do pliku za pomocą metody: void write(int b) 2. Całe ciągi bajtów mogą być zapisywane do pliku za pomocą metody: void write(byte[] cbuf, int off, int len) metoda, która czyta z tablicy cbuf od indeksu off liczbę len bajtów i zapisuje do pliku 3. void writeboolean(boolean v) zapisuje do pliku 1-bajtową wartość 4. void writebyte(int v) zapisuje do pliku 1-bajtową wartość 5. void writechar(int v) zapisuje znak jako 2-bajtową wartość 6. void writedouble(double v) zapisuje 8-bajtową wartość do pliku 7. void writefloat(float v) zapisuje 4-bajtową wartość do pliku 8. void writeint(int v) zapisuje 4 bajty do pliku 9. void writelong(long v) zapisuje 8 bajtów do pliku 10. void writeshort(int v) zapisuje 2 bajty do pliku Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 20

Aby odczytać plik: 4) Należy utworzyć obiekt (np. typu FileInputStream), powiązany ze plikiem danych binarnych (np. "plik3.dat"); FileInputStream plik = new FileInputStream("plik3.dat"); 5) W celu buforowania bajtów pochodzących z obiektu powiązanego ze źródłem danych np. typu FileInputStream należy utworzyć obiekt klasy BufferedInputStream BufferedInputStream bufor = new BufferedInputStream (plik); 6) W celu reprezentowania danych typu boolean, byte, double, float long, short należy utworzyć strumień danych typu DataInputStream powiązanego z obiektem buforującym typu BufferedInputStream DataInputStream dana= new DataInputStream (bufor); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 21

Dalej podano metody strumienia danych do odczytu danych z pliku: 1. Pojedyncze bajty mogą być odczytywane z pliku za pomocą metody: int read() 2. Całe ciągi bajtów mogą być odczytywane z pliku za pomocą metody: 3. int read(byte[] cbuf, int off, int len) metoda, która czyta plik i zapisuje do tablicy cbuf od indeksu off liczbę len bajtów i zwraca przez return liczbę faktycznie odczytanych bajtów 4. boolean readboolean() czyta z pliku 1 bajt i wraca wartość true lub false 5. byte readbyte() czyta z pliku 1 bajt i zwraca wartość typu byte 6. char readchar() czyta 1 znak (2 bajty ) i zwraca 1 znak 7. double readdouble() czyta 8 bajtów z pliku i zwraca wartość double 8. float readfloat() czyta 4 bajtów z pliku i zwraca wartość float 9. int readint() czyta 4 bajty z pliku i zwraca wartość typu int 10. long readlong() czyta 8 bajtów z pliku i zwraca wartość typu long 11. short readshort() czyta 2 bajty z pliku i zwraca wartość typu short 12. Po zapisie i odczycie strumień danych należy zamknąć metodą close() Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 22

import java.io.*; //zapis za pomocą writeint i odczyt za pomocą readint z klawiatury są podawane 4-bajtowe wartości import java.util.*; public class WEWY3_ static int weint() InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); StringTokenizer zeton; try zeton = new StringTokenizer(bufor.readLine()); return Integer.parseInt(zeton.nextToken()); catch (IOException e) System.err.println("Blad IO int "+e); return 0; catch (NumberFormatException e) System.err.println( "Blad formatu int "+e); return 0; Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 23

static void Zapiszplik3_() int dane=0; try FileOutputStream plik = new FileOutputStream ("plik2.dat"); BufferedOutputStream bufor = new BufferedOutputStream (plik); DataOutputStream dana= new DataOutputStream (bufor); while (dane!=-1) System.out.print("Podaj dane: "); dane=weint(); //odczyt wartości 4-bajtowej if (dane!=-1) dana.writeint(dane); //zapis do pliku 4 bajtów dana.close(); catch (IOException e) System.out.println ("Blad zapisu pliku bajtowego"+e); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 24

static void Odczytajplik3_() int dane=0; try FileInputStream plik = new FileInputStream ("plik2.dat"); BufferedInputStream bufor = new BufferedInputStream (plik); DataInputStream dana= new DataInputStream (bufor); try while (true) dane=dana.readint(); System.out.print(dane); //odczyt z pliku 4 bajtów catch (EOFException eof) bufor.close(); //zamknięcie bufora przez obsługę wyjątku od czytania poza plikiem System.out.println(); catch (IOException e) System.out.println ("Blad odczytu pliku bajtowego"+e); public static void main(string[] args) Zapiszplik3_(); Odczytajplik3_(); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 25

Wprowadzanie danych do pliku binarnego i wyświetlanie jego zawartości interpretując zawartość jako liczb typu int Interpretacja znakowa binarnego zapisu liczb typu int () w kodzie dwójkowym wyświetlanie zawartości pliku w edytorze tekstu Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 26

4. Serializacja obiektów Jest to mechanizm szeregowego zapisu do pliku związanego ze strumieniem wyjściowym ciągu bajtów po wykonaniu konwersji obiektu do postaci szeregowej i Odczytu szeregowego ciągu bajtów z pliku związanego ze strumieniem wejściowym i dokonanie konwersji do postaci danej (obiektu, typu podstawowego: int, float itp.) Mechanizm ten pozwala zachować całe obiekty w pliku po zakończeniu programu Obiekty zapisywane do pliku muszą implementować pusty interfejs Serializable (obiekty są serializowane) Obiekty z zagnieżdżonymi obiektami są w całości zapisywane do pliku pod warunkiem, że zagnieżdżone obiekty też są serializowane Obiekty zagnieżdżone w serializowanych klasach mogą być pomijane przy zapisie do strumienia, jeśli to konieczne, za pomocą słowa kluczowego transient Np. public transient String s = Kowalski ; Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 27

Procedura korzystania ze strumieni obiektowych powiązanych z plikami binarymi Aby utworzyć plik: 1) Należy utworzyć obiekt (np. typu FileOutputStream), powiązany ze plikiem danych binarnych (np. "Wiadomosc.obj"); FileOutputStream plikobiektow = new FileOutputStream("Wiadomosc.obj"); 2) W celu utworzenia wyjściowego strumienia obiektowego powiązanego z obiektem związanym ze źródłem danych np. typu FileOutputStream należy utworzyć obiekt klasy ObjectOutputStream ObjectOutputStream strumienobiektow=new ObjectOutputStream (plikobiektow); 3) Obiekty dziedziczące po Object i implementujace interfejs Serializable są zapisywane do pliku w postaci szeregowej za pomocą metody void writeobject(object ob) Aby odczytać plik: 1) Należy utworzyć obiekt (np. typu FileInputStream), powiązany ze plikiem danych binarnych (np. "Wiadomosc.obj"); FileInputStream plik = new FileInputStream("Wiadomosc.obj"); 2) W celu odczytu obiektow pochodzących z obiektu powiązanego ze źródłem danych np. typu FileInputStream należy utworzyć obiekt klasy ObjectInputStream ObjectInputStream bufor = new ObjectInputStream (plik); 3) Odczytu obiektów z strumienia należy wykonać za pomocą metody Object readobject() Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 28

Dalej podano część metod strumienia obiektów do zapisu różnych danych do pliku: 1) Pojedyncze bajty mogą być zapisywane do pliku za pomocą metody: void write(int b) 2) Całe ciągi bajtów mogą być zapisywane do pliku za pomocą metody: void write(byte[]cbuf) metoda, która czyta zawartosc tablicy bajtów i zapisuje ją do strumienia (buf.length bajtów) 3) Całe ciągi bajtów mogą być zapisywane do pliku za pomocą metody: 4) void write(byte[] cbuf, int off, int len) metoda, która czyta z tablicy cbuf od indeksu off liczbę len bajtów i zapisuje do pliku 5) void writeboolean(boolean v) zapisuje do pliku 1-bajtową wartość 6) void writebyte(int v) zapisuje do pliku 1-bajtową wartość 7) void writechar(int v) zapisuje znak jako 2-bajtową wartość pierwszy zapisywany jest starszy bajt (Unicode) 8) void writedouble(double v) zapisuje 8-bajtową wartość do pliku 9) void writefloat(float v) zapisuje 4-bajtową wartość do pliku 10) void writeint(int v) zapisuje 4 bajty do pliku 11) void writelong(long v) zapisuje 8 bajtów do pliku 12) void writeshort(int v) zapisuje 2 bajty do pliku Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 29

Dalej podano niektóre metody strumienia obiektów do odczytu danych z pliku: 1) Pojedyncze bajty mogą być odczytywane z pliku za pomocą metody: int read() 2) Całe ciągi bajtów mogą być odczytywane z pliku za pomocą metody: int read(byte[] cbuf, int off, int len) metoda, która czyta plik i zapisuje do tablicy cbuf od indeksu off liczbę len bajtów i zwraca przez return liczbę faktycznie odczytanych bajtów 3) boolean readboolean() czyta z pliku 1 bajt i wraca wartość true lub false 4) byte readbyte() czyta z pliku 1 bajt i zwraca wartość typu byte 5) char readchar() czyta 1 znak (2 bajty ) i zwraca 1 znak 6) double readdouble() czyta 8 bajtów z pliku i zwraca wartość double 7) float readfloat() czyta 4 bajtów z pliku i zwraca wartość float 8) int readint() czyta 4 bajty z pliku i zwraca wartość typu int 9) long readlong() czyta 8 bajtów z pliku i zwraca wartość typu long 10) short readshort() czyta 2 bajty z pliku i zwraca wartość typu short 11) Po zapisie i odczycie strumień obiektów należy zamknąć metodą close() Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 30

import java.io.*; import java.util.*; class Wiadomosc implements Serializable String dane; Date data; static String westring() InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); System.out.print("Podaj wiadomosc: "); try return bufor.readline(); catch (IOException e) System.err.println("Blad IO String"); return ""; public void zapiszwiadomosc() data = new Date(); System.out.println(data); dane =westring(); public void odczytajwiadomosc() System.out.println(data); System.out.println(dane); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 31

public class p6_6 static void Zapiszobiektydopliku() Wiadomosc wiadomosc = new Wiadomosc(); wiadomosc.zapiszwiadomosc(); try FileOutputStream plikobiektow = new FileOutputStream ("Wiadomosc.obj"); ObjectOutputStream strumienobiektow = new ObjectOutputStream (plikobiektow); strumienobiektow.writeobject(wiadomosc); strumienobiektow.close(); System.out.println("Obiekt wiadomosc zostal zapisany do pliku"); catch (IOException e) System.out.println ("Blad zapisu pliku obiektowego"+e); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 32

static void Odczytajobiektyzpliku() Wiadomosc wiadomosc = null; try FileInputStream plikobiektow = new FileInputStream ("Wiadomosc.obj"); ObjectInputStream strumienobiektow = new ObjectInputStream (plikobiektow); wiadomosc = (Wiadomosc)strumienobiektow.readObject(); System.out.println("Obiekt wiadomosc zostal odczytany z pliku"); if ( wiadomosc!= null) wiadomosc.odczytajwiadomosc(); strumienobiektow.close(); catch (Exception e) System.out.println ("Blad odczytu pliku obiektowego"+e); public static void main(string[] args) Zapiszobiektydopliku(); Odczytajobiektyzpliku(); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 33

5. Otwieranie strumieni poprzez sieć Obiekt URL (Uniform Resource Lokator) obiekt typu URL reprezentuje adres zasobu w sieci www Konstruktory klasy URL 1) URL strona= new URL("http://tycho.usno.navy.mil/cgi-bin/timer.pl"); 2) URL strona1= new URL("http://tycho.usno.navy.mil"); URL strona= new URL( strona1,"/cgi-bin/timer.pl"); 3) URL strona= new URL("http", "tycho.usno.navy.mil", "/cgi-bin/timer.pl"); 4) URL strona= new URL("http", "tycho.usno.navy.mil", 80,"/cgi-bin/timer.pl"); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 34

Procedura otwierania strumieni poprzez sieć: 1) Należy utworzyć obiekt URL z adresem zasobu www URL strona = new URL("http://tycho.usno.navy.mil/cgi-bin/timer.pl"); 2) Należy utworzyć obiekt URLConnection, który ładuje URL i tworzy połączenie do miejsca, w którym znajduje się dokument URLConnection polaczenie = strona.openconnection(); polaczenie.connect(); 3) Należy za pomocą metody getinputstream obiektu typu URLConnection utworzyć obiekt typu InputStreamReader, umożliwiający odczytanie strumienia danych z zasobu www wskazanego przez URL InputStreamReader wejscie; wejscie=new InputStreamReader(polaczenie.getInputStream()); 4) Należy utworzyć obiekt typu BufferedReader buforujący odczyt ze strumienia typu InputStreamReader BufferedReader bufor; bufor = new BufferedReader(wejscie); 5) Należy przechować dane odczytane z zasobu www (dane=bufor.readline();) np. za pomocą metody append() obiektu typu StringBuffer StringBuffer strbufor = new StringBuffer();.. dane=bufor.readline(); strbufor.append(dane + "\n"); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 35

import java.net.*; import java.awt.event.*; import java.awt.*; import java.io.*; import java.util.*; public class WEWY6 static URL strona; static String westring() InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); try return bufor.readline(); catch (IOException e) System.err.println("Blad IO String"); return ""; public static void main(string[] args) String pom; try System.out.print( Podaj adres URL ); pom = westring(); strona= new URL (pom); Odczytajplik6(); catch(malformedurlexception e) System.out.println("Zly URL: "); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 36

static void Odczytajplik6() String dane="0"; URLConnection polaczenie = null; InputStreamReader wejscie; BufferedReader bufor; StringBuffer strbufor = new StringBuffer(); try polaczenie = strona.openconnection(); polaczenie.connect(); System.out.println("Polaczenie otwarte"); wejscie = new InputStreamReader(polaczenie.getInputStream()); bufor = new BufferedReader(wejscie); System.out.println("Czytanie danych"); while ((dane=bufor.readline())!=null) strbufor.append(dane + "\n"); System.out.println(strbufor.toString()); catch(ioexception e) System.out.println("Blad wejscia/wyjścia"+e); Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 37

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 38