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



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

Strumienie i serializacja

Podstawy i języki programowania

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

Programowanie obiektowe

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

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

Strumienie, pliki. Sortowanie. Wyjątki.

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

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

Przygotował: Jacek Sroka 1. Java SE. Strumienie

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

Bezpieczne uruchamianie apletów wg

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

JAVA I SIECI. MATERIAŁY:

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

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

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

Wykład 2: Podstawy Języka

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

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

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

Programowanie obiektowe

Programowanie obiektowe

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

Strumienie, pliki. Sortowanie. Wyjątki.

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

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

Inynieria oprogramowania Lecture XXX. Java TM cz IV: IO. Bartosz Walter

Programowanie Obiektowe (Java)

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

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

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

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

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

Przykłady interfejsu TCP i UDP w Javie

Dokumentacja do API Javy.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

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

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

Programowanie obiektowe

Wykład 8: Obsługa Wyjątków

Zaawansowane aplikacje WWW - laboratorium

Wykład 7: Pakiety i Interfejsy

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

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

Java programowanie w sieci. java.net RMI

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

dr Krzysztof Podlaski

Ćwiczenie 1. Przygotowanie środowiska JAVA

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Aplikacja wielowątkowa prosty komunikator

Zaawansowane techniki programowania C#

Kurs języka Python Wykład 6. Pliki tekstowe Pliki rekordów Pliki CSV Strumienie

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

akademia androida Składowanie danych część VI

Multimedia JAVA. Historia

Programowanie w języku Java

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

Programowanie obiektowe zastosowanie języka Java SE

Programowanie w języku Java

Wykorzystywanie parsera DOM w programach Java i PL/SQL

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

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

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

Katalog książek cz. 2

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe

Programowanie 3 - Funkcje, pliki i klasy

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

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

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

Programowanie rozproszone w języku Java

Ćwiczenie 9 - Zaawansowane metody programowania w sieci komputerowej

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

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

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Tworzenie i wykorzystanie usług

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

Programowanie w Internecie. Java

Podstawy i języki programowania

Metody Metody, parametry, zwracanie wartości

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

Materiały do laboratorium I

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Algorytmy z powrotami. Algorytm minimax

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Programowanie obiektowe

Aplikacja wielow tkowa prosty komunikator

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

Adresy URL. Zaawansowane technologie Javy 2019

Programowanie sieciowe

Projektowanie aplikacji internetowych laboratorium

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

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Transkrypt:

Język JAVA podstawy Wykład 6, część 2 Jacek Rumiński 1

Język JAVA podstawy Plan wykładu: 1. Wprowadzenie do operacji wejścia/wyjścia: strumienie 2. Podstawowe klasy strumieni i InputStream/OutputStream t 3. Obsługa strumieni znaków 4. Operacje na plikach w systemie plików 5. Specjalne zastosowania strumieni Jacek Rumiński 2

Język JAVA strumienie znaków Podstawowe klasy strumieni znaków W związku z problemem wynikającym z konwersji znaków Javy (Unicode) na bajty i odwrotnie występujących we wczesnych (JDK 1.0) realizacjach klas obsługi ł strumieni i począwszy od wersji JDK1.1 1 wprowadzono dodatkowe klasy Reader i Writer. Obie abstrakcyjne klasy są analogicznie skonstruowane (dziedziczenie z klasy Object i deklaracja metod) jak klasy InputStream oraz OutputStream. Klasy dziedziczące po Reader i Writer zapewniają ciekawe możliwości zastosowania. Odczyt danych odbywa się poprzez zastosowanie metod read() lub readline() natomiast zapis danych do strumienia poprzez wykorzystanie metod write(). Jacek Rumiński 3

Język JAVA strumienie znaków Wybrane klasy dziedziczące po klasie Reader/Writer: BufferedReader buforuje otrzymywany tekst (czytaj linię tekstu!), InputStreamReader czyta bajty zamieniające je na tekst według podanego systemu kodowania znaków, FileReader odczyt danych tekstowych z pliku dla domyślnego systemu kodowania znaków, poprzez podanie ścieżki zależnej systemowo (String) lub abstrakcyjnej (File) StringReader obsługa strumienia pochodzącego od obiektu klasy String. Dla klasy Writer analogicznie, tylko Writer, np. FileWriter. Dodatkowa klasa to PrintWriter (analog klasy PrintStream). Jacek Rumiński 4

Język JAVA DrukujJedi.java import java.io.*; class FormatujStrumien extends OutputStreamWriter{ FormatujStrumien(String kodowanie) throws UnsupportedEncodingException{ p super(system.out,kodowanie); }//koniec FormatujStrumien() }//koniec FormatujStrumien public class DrukujJedi{ public static void main(string args[]){ try{ FormatujStrumien fs=new FormatujStrumien("Cp852"); fs.write("ąęśółżźćń"); fs.close(); /* //Albo: PrintWriter pw= new PrintWriter(new OutputStreamWriter(System.out,"Cp852")); pw.println("ąęśółżźćń"); pw.close(); */ //Zamiast System.out może być strumień związany z plikiem, //np. new FileOutputStream("jakisPlik.txt"); } catch (Exception e){ System.out.println( println("wyjątek: "+e);} }//koniec main() }// koniec public class DrukujJedi Jacek Rumiński 5

Język JAVA NoweEchoJedi.java import java.io.*; public class NoweEchoJedi{ public static void main(string args[]){ PrintWriter pw=null; try{ pw= new PrintWriter(new OutputStreamWriter(System.out,"Cp852"),true); //true na końcu oznacza, że dane są przesyłane od razu (bez flush()) BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String test; //Jeśli chcemy dodać znak specjalny, np. cudzysłów musimy użyć znaku \" pw.println("wprowadź dane. Linia z \".\" oznacza koniec wprowadzania."); //readline() czytaj całą ł linię while(!(test=br.readline()).equals(".")){ pw.println("wprowadzono: \t"+test); } pw.close(); }catch (Exception e){ System.out.println("Wyjatek: "+e);} }//koniec main() }//koniec public class NoweEchoJedi Jacek Rumiński 6

Język JAVA strumienie znaków Rozdzielanie tekstu StringTokenizer/StreamTokenizer Na zakończenie omawiania klas związanych z obsługą strumieni warto zapoznać się zklasą StreamTokenizer, dzieląca strumień tekstowy na leksemy. Klasa ta daje więc swoistą funkcjonalność wykrywanie elementów strumienia i umieszczania ich w tablicy. Wskazując znak oddzielający leksemy (ordinarychar()) można dokonać przeformatowania przesłanego tekstu (np. podzielićścieżkę dostępu, dokonać detekcji liczb w tekście, itp.). Pobranie leksemu z tablicy odbywa się poprzez wywołanie metody nexttoken(). Warto zauważyć, że istnieje klasa StringTokenizer o podobnym działaniu (prostsza), której argumentem nie jest jednak strumień, a obiekt klasy String. Jacek Rumiński 7

Język JAVA SeparatorJedi.java import java.io.*; import java.util.stringtokenizer; public class SeparatorJedi{ public static void main(string args[]){ System.out.println("Podaj tekst zawierający znak :."); Reader r = new BufferedReader(new InputStreamReader(System.in)); StreamTokenizer st = new StreamTokenizer(r); st.ordinarychar('.'); //ustaw znak rozdzielający try{ while (st.nexttoken()!= StreamTokenizer.TT_EOF){ //koniec? CTRL Z if (st.ttype==streamtokenizer.tt_word){ //tekst? System.out.println(new String(st.sval)); //pobierz wartość }//if }//while hl }catch (IOException ioe){ System.out.println("Błąd operacji I/O"); } String dane="153.19.51.66"; System.out.println("Dzielę tekst: "+dane); StringTokenizer i strt tt= new StringTokenizer(dane,"."); i ") while (strt.hasmoretokens()) { System.out.println(strT.nextToken()); }//koniec while }//koniec main() }//koniec public class SeparatorJedi Jacek Rumiński 8

Język JAVA podstawy Plan wykładu: 1. Wprowadzenie do operacji wejścia/wyjścia: strumienie 2. Podstawowe klasy strumieni i InputStream/OutputStream t 3. Obsługa strumieni znaków 4. Operacje na plikach w systemie plików 5. Specjalne zastosowania strumieni Jacek Rumiński 9

Język JAVA operacje na plikach Operacje na plikach Dostęp do plików zaprezentowany wcześniej wykorzystywał klasy FileInputStream, FileOutputStream, FileReader i FileWriter. Konstruktory tych klas umożliwiają utworzenie strumienia poprzez podanie ścieżki do pliku jako argumentu. Ścieżkę można podać stosując dwie metody: 1. poprzez ciągznaków(obiektklasystring) 2. poprzez obiekt klasy File, reprezentujący logiczną ścieżkę do plików i katalogów. Ścieżka dostępu do pliku może być sklasyfikowana ze względu na jej zasięg lubzewzględu na środowisko, dla którego jest zdefiniowana (np. Windows, Linux). W pierwszym przypadku dzieli sięę ścieżki dostępu na absolutne i relatywne. Absolutne to te, które podają adres do pliku względem głównego korzenia systemu plików danego środowiska. Relatywne to te, które adresują plik względem katalogu bieżącego. Jacek Rumiński 10

Język JAVA operacje na plikach Operacje na plikach Druga klasyfikacja rozróżnia ścieżki dostępu pod względem środowiska, dla którego jest ona zdefiniowana, co w praktyce dzieli ścieżki dostępu na te zdefiniowane dla systemów opartych na UNIX i na te, zdefiniowane dla systemów opartych na MS Windows (znak rozdzielający katalogi: własność systemu o nazwie file.separator, lub wartość pola File.separator). Przykłady: absolutna ścieżka dostępu: UNIX: /utl/software/java/projekty MS Windows: c:\utl\softare\java\projekty \ \j \p j relatywna ścieżka dostępu: UNIX: java/projekty MS Windows: java\projekty. Jacek Rumiński 11

Język JAVA operacje na plikach Operacje na plikach TworzącobiektklasyFile obiekt klasy dokonywana jest konwersja łańcucha znaków na abstrakcyjną ścieżkę dostępu do pliku (abstrakcyjna ścieżka dostępu do pliku jest tworzona według określonych reguł podanych w dokumentacji API). Metody klasy File umożliwiają kontrolę podanej ścieżki i plików (np. isfile(), isdirectory(), ishidden, canread(), itp.) oraz dokonywania konwersji (np. getpath(), getparent(), getname(), tourl(), itp.), jak i wykonywania prostych operacji (list(), mkdir(), itp.). Uwaga! Należy ypamiętać, ę że zapis tekstowy ścieżki dostępu dla środowiska MS Windows musi zawierać podwójny separator, gdyż pojedynczy znak umieszczony w ciągu znaków oznacz początek kodu ucieczki (czyli znak specjalny), np. c:\\java\\kurs\\wyklad\\np". Jacek Rumiński 12

Język JAVA SystemPlikowJedi.java import java.io.*; import java.util.*; public class SystemPlikowJedi{ public static void main(string args[]){ //utworzenie obiektu File oznacza adresowanie domniemanego węzła w systemie plików File f = new File("DANE_JEDI"); if(f.exists()){//jeśli dany węzeł istnieje if(f.isdirectory()){//jeśli jest to katalog System.out.println("Katalog: "+f.getabsolutepath()+" już istniał.\ndata modyfikacji: "+ new Date(f.lastModified())+". Usuwam go.\n"); f.delete();//usuń go }//if f.isdirectory() }//if f.exists() if (f.mkdir()) ()) {//jeśli uda się utworzyć ć katalog File g = new File (".");//adresuj bieżący węzeł zawierający nowy katalog String s[] = g.list();//generuj listę węzłów (plików i katalogów) System.out.println("Zawartość t tl t katalogu "+g.getabsolutepath()+": t th() " \n"); for (int i =0; i<s.length; i++){ System.out.println(s[i]);//wyświetl kolejne nazwy }//for } else { System.out.println( println("nie można utworzyć katalogu!"); }//else }//koniec main() }//koniec public class SystemPlikowJedi Jacek Rumiński 13

Język JAVA podstawy Plan wykładu: 1. Wprowadzenie do operacji wejścia/wyjścia: strumienie 2. Podstawowe klasy strumieni i InputStream/OutputStream t 3. Obsługa strumieni znaków 4. Operacje na plikach w systemie plików 5. Specjalne zastosowania strumieni Jacek Rumiński 14

Język JAVA różne strumienie Specjalne zastosowania strumieni Poza przedstawionym materiałem strumienie oraz przesyłanie danych obsługiwane jest w Javie w różnych pakietach. Przede wszystkim dotyczy to nowego pakietu java.nio.* Pakiet ten obsługuje nową bardziej zaawansowane sposoby przesyłania i kontroli bloków bajtów (bufory). Funkcjonalność pakietu java.nio będzie omówiona na kolejnym etapie poznawania Javy. Ponadto obsługa strumieni związana będzie z pakietami i klasami, które obsługują różne formy komunikacji, np. przesyłanie danych przez sieć (pakiet java.net), przesyłanie danych przez interfejsy komunikacyjne (javax.comm). Wówczas dla danego węzła (źródła lub przeznaczenia) zapewniana będzie funkcjonalność otwarcia strumienia (czyli utworzenia obiektu jednej z klas omówionych wcześniej). Jacek Rumiński 15

Język JAVA PobierzJedi.java import java.net.*; import java.io.*; public class PobierzJedi{ public static void main(string args[]){ URL url; String tekst; if (args.length!=1) { System.out.println("Wywołanie: PobierzJedi URL; gdzie URL to adres zasobów"); System.exit(1); }//if try{ url = new URL(args[0]); //Klasa URL reprezentuje zasób według adresu zasobu, np. http://www.biomed.gda.pl BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream())); while( (tekst=br.readline())!=null){ System.out.println(tekst); }//while } catch (Exception e) { e.printstacktrace(); }//catch }//koniec main() }// koniec public class PobierzJedi Jacek Rumiński 16

Język JAVA różne strumienie Specjalne zastosowania strumieni Kolejną dziedziną wykorzystania strumieni jest wykonywanie operacji na przesyłanych danych. Do operacji takich można zaliczyć kodowanie danych (JPEG, MPEG) czy kompresję danych. Przykładowo w pakiecie java.util.zip zdefiniowano szereg klas strumieni obsługujących kompresję w formie ZIP i GZIP. Podstawowe klasy strumieni tam przechowywane to: CheckedInputStream, CheckedOutputStream, DeflaterOutputStream, GZIPInputStream, GZIPOutputStream, InflaterInputStream, ZipInputStream, ZipOutputStream. Jacek Rumiński 17

Język JAVA KompresujJedi.java import java.io.*; import java.util.zip.*; public class KompresujJedi{ public static void main(string args[]){ String s; byte b[] = new byte[100]; for (int i=0; i<100; i++){ b[i]=(byte) (i/10); //10 różnych wartości }//for try{ FileOutputStream o = new FileOutputStream("plik2.txt"); o.write(b); //zapisanie 100 bajtów, 10*10 różnych wartości o.flush(); o.close(); FileOutputStream fos = new FileOutputStream("plik2.gz"); GZIPOutputStream tst z = new GZIPOutputStream(new tst BufferedOutputStream(fos)); tst z.write(b,0,b.length);//zapis bajtów będących efektem kompresji 44 bajty z.close(); } catch (Exception e){} //brak obsługi wyjątków }// koniec main }// koniec public class Kompresja Jacek Rumiński 18

Język JAVA koniec wykładu 6 Co dalej? Przedstawiona część wykładu dotycząca obsługi strumieni w Javie to wybraneprzezemnieelementy,któreuważam za kluczowe (możliwości są dużo większe). Zainteresowanych odsyłam do zasobów Internetu oraz dedykowanychd podręczników. To już koniec podstawowego kursu z Javy. Co dalej? Dla studentów kierunku INŻYNIERIA BIOMEDYCZNA dostępny będzie kurs na następnym poziomie poznawania Javy (wątki, programowanie sieciowe, programowanie rozproszone). Ponadto dostępne będą dedykowane, pojedyncze prezentacje w zakresie JAK TO ZROBIĆ WJAVIE. Jacek Rumiński 19