Programowanie Obiektowe Java

Wielkość: px
Rozpocząć pokaz od strony:

Download "Programowanie Obiektowe Java"

Transkrypt

1 Programowanie Obiektowe Java Małgorzata Janik Zakład Fizyki Jądrowej

2 Operacje wejścia-wyjścia strumienie

3 Pakiety IO Java dostarcza dwóch podstawowych pakietów (z podpakietami), służących do przeprowadzania operacji wejścia-wyjścia: java.io java.nio Pakiet java.io zawiera przede wszystkim klasy, które pozwalają operować na strumieniach danych. W pakiecie java.nio ("Java new input-output", w skrócie NIO) wprowadzono dodatkowe środki wejścia-wyjścia, takie jak kanały, bufory i selektory Mimo nazwy ("new input-output") środki te nie zastępują klas strumieniowych. Służą przede wszystkim do zapewnienia wysokiej efektywności i elastyczności programów, które w bardzo dużym stopniu obciążone są operacjami wejściawyjścia. W szczególności dotyczy to serwerów, które muszą równolegle obsługiwać ogromną liczbę połączeń sieciowych. Zródło: 3/85

4 Pakiety IO Java dostarcza dwóch podstawowych pakietów (z podpakietami), służących do przeprowadzania operacji wejścia-wyjścia: java.io java.nio Pakiet java.io zawiera przede wszystkim klasy, które pozwalają operować na strumieniach danych. W pakiecie java.nio ("Java new input-output", w skrócie NIO) wprowadzono dodatkowe środki wejścia-wyjścia, takie jak kanały, bufory i selektory Mimo nazwy ("new input-output") środki te nie zastępują klas strumieniowych. Służą przede wszystkim do zapewnienia wysokiej efektywności i elastyczności programów, które w bardzo dużym stopniu obciążone są operacjami wejściawyjścia. W szczególności dotyczy to serwerów, które muszą równolegle obsługiwać ogromną liczbę połączeń sieciowych. Stosunkowo niedawno (w Javie 7) doszedł również pakiet NIO.2... Zródło: 4/85

5 Strumienie Image by Thalpha 5/85

6 Strumienie Strumień danych jest pojęciem abstrakcyjnym, logicznym. Oznacza ciąg danych, właśnie strumień, do którego dane mogą być dodawane i z którego dane mogą być pobierane. Przy czym: strumień związany jest ze źródłem lub odbiornikiem danych, źródło lub odbiornik mogą być dowolne: plik, pamięć, URL, gniazdo, potok... strumień służy do zapisywania/odczytywania informacji - dowolnych danych, program: kojarzy strumień z zewnętrznym źródłem/odbiornikiem, otwiera strumień, dodaje lub pobiera dane ze strumienia, zamyka strumień. przy czytaniu lub zapisie danych z/do strumienia mogą być wykonywane dodatkowe operacje (np. buforowanie, kodowanie/dekodowanie, kompresja/dekompresja) w Javie dostarczono szereg klas reprezentujących strumienie; hierarchia tych klas pozwala na programowanie w sposób abstrahujący od konkretnych źródeł i odbiorników. Żródło: 6/85

7 Klasy strumieni Żródło: Java Tutorial, Sun Microsystems /85

8 Strumienie wejściowe / wyjściowe Strumień wejściowy 8/85

9 Strumienie wejściowe / wyjściowe Na strumieniach możemy wykonywać dwie podstawowe operacje: odczytywanie danych z pliku, z konsoli, z tablicy, z zewnętrznego urządzenia, z gniazda... zapisywanie danych do pliku, na ekran, do gniazda... Z tego punktu widzenia możemy mówić o strumieniach wejściowych i wyjściowych. I odpowiednio do tego Java wprowadza dwie rozłączne hierarchie klas strumieniowych: klasy strumieni wejściowych i klasy strumieni wyjściowych. Source: 9/85

10 Strumienie wejściowe / wyjściowe Ilość wejściowych / wyjściowych strumieni w programie jest nieograniczona: od 0 do N. 10/85

11 Strumienie powiązane z konsolą W Javie istnieją strumienie tworzone automatycznie powiązane z konsolą: System.out: strumień standardowego wyjścia System.in: strumień stndardowego wejścia System.err: strumień standardowego wyjścia błędu Kod do wypisania informacji / błędu w konsoli: System.out.println("simple message"); System.err.println("error message"); Kod do wczytania informacji z konsoli: int i=system.in.read();//returns ASCII code of 1st character System.out.println((char)i);//will print the character 11/85

12 Strumienie bajtowe / znakowe Pobranie/zapis danych może dotyczyć określonych atomistycznych (minimalnie rozróżnialnych w trakcie operacji) porcji danych. Mogą to być Bajty Znaki (standard w Javie to Unikod, znak Unikodu jest złożony z dwóch bajtów) Wobec tego powstają kolejne dwie rozłączne hierarchie klas strumieniowych: klasy strumieni bajtowych ( atomem operacji we-wy jest bajt), klasy strumieni znakowych ( atomem są znaki Unikodu 2 bajty). Przy przetwarzaniu tekstów należy korzystać ze strumieni znakowych ze względu na to, iż w trakcie czytania/pisania wykonywane są odpowiednie operacje kodowania/dekodowania ze względu na stronę kodową właściwą dla źródła/odbiornika Żródło: 12/85

13 Strumienie znakowy / bajtowy Strumień wejściowy znakowy Strumień wejściowy bajtowy Nie można ich traktować tak samo Oddzielne klasy dla obu przypadków. 13/85

14 Rodzaje strumieni Zatem w Javie mamy 4 podstawowe rodzaje strumieni: Wejścia / wyjścia Bajtowe / znakowe Wejście Wyjście Strumień bajtowy InputStream OutputStream Strumień znakowy Reader Writer 14/85

15 Klasy strumieni InputStream, OutputStream, Reader, Writer 4 klasy strumieni abstrakcyjnych 4 klasy strumieni abstrakcyjnych Żródło: Java Tutorial, Sun Microsystems 2002

16 Rodzaje strumieni Wejście Wyjście Strumień bajtowy InputStream OutputStream Strumień znakowy Reader Writer Powyższe klasy strumieni to klasy abstrakcyjne, zatem bezpośrednio nie można tworzyć obiektów tych klas. Dostarczają one natomiast podstaw dla wszystkich innych klas strumieniowych oraz paru ogólnych użytecznych (choć bardzo podstawowych) metod. Metody te umożliwiają m.in. czytanie - read(..) (bajtów, znaków) - różne wersje tej (przeciążonej) metody pozwalają na przeczytanie jednego bajtu ze strumienia bajtowego lub znaku ze strumienia znakowego albo całej porcji bajtów/znaków, zapisywanie - write(..) (bajtów/znaków) - różne wersje tej (przeciążonej) metody pozwalają zapisywac pojedyńcze bajty/znaki lub tablice bajtów/znaków, a w przypadku strumieni znakowych również napisy (obiekty klasy String), pozycjonowanie strumieni (metody skip(..), mark(..), reset() ) - każdy strumień może być traktowany jako sekwencja bajtów/znaków, czytanie i zapisywanie zawsze dotyczy bieżącej pozycji tej sekwencji; po wykonaniu operacji czytania lub zapisu bieżąca pozycja zwiększa się o jeden; metody pozycjonowania pozwalają zmieniać bieżącą pozycję. zamykanie strumieni (metoda close()) - strumień zawsze należy zamknąć po zakończeniu operacji na nim. Metody te są zazwyczaj odpowiednio przedefiniowane w klasach dziedziczących; polimorfizm zapewnia ich oszczędne i właściwe użycie. 16/85

17 Przykład Klasa która kopiuje strumień wejściowy do strumienia wyjściowego class Stream { static void copy(inputstream in, OutputStream int c; while ((c = in.read())!= -1) out.write(c); } } out) throws IOException { static void copy(reader in, Writer out) throws IOException { int c; while ((c = in.read())!= -1) out.write(c); } Uwaga: metoda read() zwraca liczbę całkowitą, reprezentującą kolejny znak ze strumienia znakowego (lub bajt ze strumienia bajtowego) albo wartość -1 gdy czytanie sięga poza koniec pliku. Klasy abstrakcyjne Wejście Wyjście Strumień bajtowy InputStream OutputStream Strumień znakowy Reader Writer 17/85

18 Przykład Klasa która kopiuje strumień wejściowy do strumienia wyjściowego class Stream { static void copy(inputstream in, OutputStream int c; while ((c = in.read())!= -1) out.write(c); } } out) throws IOException { static void copy(reader in, Writer out) throws IOException { int c; while ((c = in.read())!= -1) out.write(c); } Uwaga: metoda read() zwraca liczbę całkowitą, reprezentującą kolejny znak ze strumienia znakowego (lub bajt ze strumienia bajtowego) albo wartość -1 gdy czytanie sięga poza koniec pliku. Możemy teraz użyć metody copy wobec dowolnych strumieni z odpowiednich konkretnych klas hierarchii klas strumieniowych, np. Stream.copy(input, output); By kopiowanie miało sens input musi być powiązane z konkretnym źródłem danych, a output konkretnym odbiornikiem danych. 18/85

19 Przykład Klasa która kopiuje strumień wejściowy do strumienia wyjściowego class Stream { static void copy(inputstream in, OutputStream int c; while ((c = in.read())!= -1) out.write(c); } } out) throws IOException { static void copy(reader in, Writer out) throws IOException { int c; while ((c = in.read())!= -1) out.write(c); } Uwaga: metoda read() zwraca liczbę całkowitą, reprezentującą kolejny znak ze strumienia znakowego (lub bajt ze strumienia bajtowego) albo wartość -1 gdy czytanie sięga poza koniec pliku. Możemy teraz użyć metody copy wobec dowolnych strumieni z odpowiednich konkretnych klas hierarchii klas strumieniowych, np. Stream.copy(input, output); By kopiowanie miało sens input musi być powiązane z konkretnym źródłem danych, a output konkretnym odbiornikiem danych. Strumień (w którymś momencie) musi być związany z konkretnym źródłem bądź odbiornikiem. 19/85

20 Wiązanie strumienia z danymi Żródło/ odbiornik Strumienie znakowe Strumienie bajtowe Wejście Wejście Wyjście źródła Wyjście źródła Pamięć CharArrayWriter CharArrayWriter ByteArrayInputStream ByteArrayOutputStream String StringReader StringWriter Potok PipedReader PipedWriter PipedInputStream PipedOutputStream Plik FileReader FileWriter FileInputStream FileOutputStream Wymienione wyżej klasy pozwalają na powiązanie strumienia z konkretnym wejściem lub wyjściem. Wyżej wymienione nie są jednak jedynymi, można tu wspomnieć np. o klasie GZIPInputStream który umożliwia obsługę strumieni spakowanych algorytmem gzip. 20/85

21 Przykład Chcielibyśmy wczytać informacje z jednego pliku tekstowego i zapisać do innego pliku Potrzebujemy Strumienia znakowego na wejściu wczytującego z pliku Strumienia znakowego na wyjściu, zapisującego do pliku 21/85

22 Przykład Chcielibyśmy wczytać informacje z jednego pliku tekstowego i zapisać do innego pliku Potrzebujemy Strumienia znakowego na wejściu wczytującego z pliku FileReader Strumienia znakowego na wyjściu, zapisującego do pliku FileWriter 22/85

23 Przykład Chcielibyśmy wczytać informacje z jednego pliku tekstowego i zapisać do innego pliku Potrzebujemy Strumienia znakowego na wejściu wczytującego z pliku FileReader Strumienia znakowego na wyjściu, zapisującego do pliku FileWriter Konstruktor przyjmuje np. static public void main(string[] args) { nazwę / ścieżkę do pliku try { FileReader in1 = new FileReader("plik0.txt"); FileWriter out1 = new FileWriter("plik1.txt"); Stream.copy(in1, out1); in1.close(); out1.close(); } catch(ioexception exc) { exc.printstacktrace(); Po użyciu strumienie } zawsze zamkykamy! 23/85

24 Przykład Chcielibyśmy wczytać informacje z jednego pliku tekstowego i zapisać do innego pliku Potrzebujemy Strumienia znakowego na wejściu wczytującego z pliku FileReader Strumienia znakowego na wyjściu, zapisującego do pliku FileWriter static public void main(string[] args) { try { FileReader in1 = new FileReader("plik0.txt"); FileWriter out1 = new FileWriter("plik1.txt"); Stream.copy(in1, out1); in1.close(); Możemy użyć kopiowania strumieni out1.close(); zaprezentowanego wcześniej } catch(ioexception exc) { exc.printstacktrace(); } 24/85

25 Przypomnienie Klasa która kopiuje strumień wejściowy do strumienia wyjściowego class Stream { static void copy(inputstream in, OutputStream int c; while ((c = in.read())!= -1) out.write(c); } } out) throws IOException { static void copy(reader in, Writer out) throws IOException { int c; while ((c = in.read())!= -1) out.write(c); } Uwaga: metoda read() zwraca liczbę całkowitą, reprezentującą kolejny znak ze strumienia znakowego (lub bajt ze strumienia bajtowego) albo wartość -1 gdy czytanie sięga poza koniec pliku. Możemy teraz użyć metody copy wobec dowolnych strumieni z odpowiednich konkretnych klas hierarchii klas strumieniowych, np. Stream.copy(input, output); By kopiowanie miało sens input musi być powiązane z konkretnym źródłem danych, a output konkretnym odbiornikiem danych. Strumień (w którymś momencie) musi być związany z konkretnym źródłem bądź odbiornikiem. 25/85

26 Przykład II Chcielibyśmy stworzyć strumień ze Stringa i zapisać do pliku Strumienia znakowego na wejściu używającego zadeklarowanego Stringa (z pamięci) Strumienia znakowego na wyjściu, zapisującego do pliku 26/85

27 Wiązanie strumienia z danymi Żródło/ odbiornik Strumienie znakowe Strumienie bajtowe Wejście Wyjście Wejście Wyjście CharArrayWriter CharArrayWriter ByteArrayInputStream ByteArrayOutputStream StringReader StringWriter Potok PipedReader PipedWriter PipedInputStream PipedOutputStream Plik FileReader FileWriter FileInputStream FileOutputStream Pamięć Strumienia znakowego na wejściu używającego zadeklarowanego Stringa Strumienia znakowego na wyjściu, zapisującego do pliku

28 Wiązanie strumienia z danymi Żródło/ odbiornik Strumienie znakowe Strumienie bajtowe Wejście Wyjście Wejście Wyjście CharArrayWriter CharArrayWriter ByteArrayInputStream ByteArrayOutputStream StringReader StringWriter Potok PipedReader PipedWriter PipedInputStream PipedOutputStream Plik FileReader FileWriter FileInputStream FileOutputStream Pamięć Strumienia znakowego na wejściu używającego zadeklarowanego Stringa Strumienia znakowego na wyjściu, zapisującego do pliku

29 Przykład II Chcielibyśmy stworzyć strumień ze Stringa i zapisać do pliku Strumienia znakowego na wejściu używającego zadeklarowanego Stringa StringReader Strumienia znakowego na wyjściu, zapisującego do pliku FileWriter static public void main(string[] args) StringReader { w konstruktorze try { przyjmuje String który ma być źródłem String msg = "Ala ma kota"; StringReader in2 = new StringReader(msg); FileWriter out2 = new FileWriter("plik2.txt"); Stream.copy(in2, out2); in2.close(); out2.close(); } catch(ioexception exc) { exc.printstacktrace(); }

30 Przykład II Chcielibyśmy stworzyć strumień ze Stringa i zapisać do pliku Strumienia znakowego na wejściu używającego zadeklarowanego Stringa StringReader Strumienia znakowego na wyjściu, zapisującego do pliku FileWriter static public void main(string[] args) { try { String msg = "Ala ma kota"; StringReader in2 = new StringReader(msg); FileWriter out2 = new FileWriter("plik2.txt"); Stream.copy(in2, out2); in2.close(); out2.close(); Przy używaniu strumieni } catch(ioexception exc) { ZAWSZE exc.printstacktrace(); łapiemy wyjątki IOException! }

31 Uwagi Komentarze: W podanym przykładzie używaliśmy jednej z wersji konstruktorów klas strumieniowych związanych z plikami 4 klasy strumieni abstrakcyjnych podaliśmy jako argument nazwę pliku przy tworzeniu obiektów klas strumieniowych, związanych z plikami, odpowiednie pliki są otwierane; można także utworzyć strumień plikowy podając jako argument konstruktora referenecję do obiektu klasy File (o tym zaraz) strumienie wejściowe są otwierane "tylko metody do odczytu", Nie ma jedynej słusznej otwarcia pliku. strumienie wyjściowe "tylko do zapisu". strumienie wyjściowe mogą być otwarte w trybie dopisywania (należy użyć konstruktora z Istnieje wiele konstruktorów, drugim argumentem "append mode" = true); w takim przypadku dane będo dopisywane do należy dobrać odpowiedni do danej sytuacji. końca strumienia, przy operacjach na strumieniach może powstać wyjątek klasy IOException oznaczający błąd operacji (np. odczytu lub zapisu), a także wyjątki klas pochodnych FileNotFoundException (brak pliku) oraz EOFException (w trakcie operacji czytania lub pozycjonowania osiągnięto koniec pliku), Strumienie danych są wykorzystywane przez wiele programów nie tylko do odczytu plików, ale np. do przesyłania danych pomiędzy poszczególnymi wątkami czy też do sieci.

32 Uwagi Komentarze: W podanym przykładzie używaliśmy jednej z wersji konstruktorów klas strumieniowych związanych z plikami 4 klasy strumieni abstrakcyjnych podaliśmy jako argument nazwę pliku przy tworzeniu obiektów klas strumieniowych, związanych z plikami, odpowiednie pliki są otwierane; strumienie wejściowe są otwierane "tylko do odczytu", strumienie wyjściowe "tylko do zapisu". można także utworzyć strumień plikowy podając jako argument konstruktora referenecję do obiektu klasy File (o tym zaraz) strumienie wyjściowe mogą być otwarte w trybie dopisywania (należy użyć konstruktora z drugim argumentem "append mode" = true); w takim przypadku dane będo dopisywane do końca strumienia, przy operacjach na strumieniach może powstać wyjątek klasy IOException oznaczający błąd operacji odczytu lub zapisu), a także wyjątki klas pochodnych FileWriter out (np. = new FileWriter("plik.txt"); FileNotFoundException (brak pliku) oraz EOFException (w trakcie operacji czytania lub pozycjonowania osiągnięto koniec pliku), Plik domyślnie otworzy się do zapisu. Nie ma metody open. Strumienie danych są wykorzystywane przez wiele programów nie tylko do odczytu plików, ale np. do przesyłania danych pomiędzy poszczególnymi wątkami czy też do sieci.

33 Uwagi Komentarze: W podanym przykładzie używaliśmy jednej z wersji konstruktorów klas strumieniowych związanych z plikami 4 klasy strumieni abstrakcyjnych podaliśmy jako argument nazwę pliku przy tworzeniu obiektów klas strumieniowych, związanych z plikami, odpowiednie pliki są otwierane; strumienie wejściowe są otwierane "tylko do odczytu", strumienie wyjściowe "tylko do zapisu". można także utworzyć strumień plikowy podając jako argument konstruktora referenecję do obiektu klasy File (o tym zaraz) strumienie wyjściowe mogą być otwarte w trybie dopisywania (należy użyć konstruktora z drugim argumentem "append mode" = true); w takim przypadku dane będo dopisywane do końca strumienia, przy operacjach na strumieniach może powstać wyjątek klasy IOException oznaczający błąd operacji (np. odczytu lub zapisu), a także wyjątki klas pochodnych FileNotFoundException (brak pliku) oraz EOFException (w trakcie operacji czytania lub pozycjonowania osiągnięto koniec pliku), Strumienie danych są wykorzystywane przez wiele programów nie tylko Trzeba pamiętać o obsłudze wyjątków! do odczytu plików, ale np. do przesyłania danych pomiędzy poszczególnyminależy wątkami czy też do sieci. chociaż wypisać printstacktrace() który wypisuje w konsoli szczegóły problemu

34 Uwagi Komentarze: W podanym przykładzie używaliśmy jednej z wersji konstruktorów klas strumieniowych związanych z plikami 4 klasy strumieni abstrakcyjnych podaliśmy jako argument nazwę pliku przy tworzeniu obiektów klas strumieniowych, związanych z plikami, odpowiednie pliki są otwierane; strumienie wejściowe są otwierane "tylko do odczytu", strumienie wyjściowe "tylko do zapisu". można także utworzyć strumień plikowy podając jako argument konstruktora referenecję do obiektu klasy File (o tym zaraz) strumienie wyjściowe mogą być otwarte w trybie dopisywania (należy użyć konstruktora z drugim argumentem "append mode" = true); w takim przypadku dane będo dopisywane do końca strumienia, przy operacjach na strumieniach może powstać wyjątek klasy IOException oznaczający błąd operacji (np. odczytu lub zapisu), a także wyjątki klas pochodnych Strumienie często służą(wdotrakcie obsługi plików, FileNotFoundException (brak pliku) oraz EOFException operacji nie tylko czytania lub pozycjonowania osiągnięto koniec ale pliku), Strumienie danych są wykorzystywane przez wiele programów nie tylko do odczytu plików, ale np. do przesyłania danych pomiędzy poszczególnymi wątkami czy też do sieci.

35 Klasy strumieni Szare elementy oznaczają związane z konkretnym źródłem/odbiornikiem 4 klasy strumieni abstrakcyjnych dyskutowane przed chwilą, Białe - klasy przetwarzające (realizujące określone rodzaje przetwarzania) 4 klasy strumieni abstrakcyjnych dyskutowane za chwilę. Żródło: Java Tutorial, Sun Microsystems 2002

36 Klasy przetwarzające Samo określenie strumienia często nie wystarcza. Ciągnąc dalej analogię z hydrobudownictwem na tym etapie mamy już źródło i rzekę. Teraz czas stawiać zapory i elektrownie.

37 Klasy przetwarzające Samo określenie strumienia często nie wystarcza. Ciągnąc dalej analogię z hydrobudownictwem na tym etapie mamy już źródło i rzekę. Teraz czas stawiać zapory i elektrownie.

38 Klasy przetwarzające Ciągnąc dalej analogię z hydrobudownictwem na tym etapie mamy już źródło i rzekę. Teraz czas stawiać zapory. Odpowiednikiem zapór są klasy przetwarzające strumienie, służą one do tego aby nasze strumienie bajtów bądź znaków wykorzystać w użyteczny sposób. Przykładem są klasy buforujące. Dzięki temu program może działać szybciej, bo nie musi co chwilę odwoływać się do danych (np. na dosyć powolnym dysku) a czyta je z bufora. Życiowym przykładem takiego bufora jest lodówka, która przechowuje (buforuje) nam kupione w sklepie produkty. Dzięki niej nie musimy biegać co chwilę do sklepu.

39 Klasy przetwarzające Rodzaj przetwarzania Strumienie znakowe Strumienie bajtowe Buforowanie BufferedReader, BufferedWriter BufferedInputStream, BufferedOutputStream Filtrowanie FilterReader, FilterWriter FilterInputStream, FilterOutputStream Konwersja: bajty-znaki InputStreamReader, OutputStreamWriter Serializacja obiektów ObjectInputStream, ObjectOutputStream Czytanie typów prostych z bajtów DataInputStream, DataOutputStream Zliczanie wierszy LineNumberReader LineNumberInputStream Drukowanie PrintWriter PrintStream

40 Klasy przetwarzające Jak użyć klasy przetwarzającej? Konstruktory klas przetwarzających mają jako argument referencję do obiektów podstawowych klas abstrakcyjnych hierarchii dziedziczenia (InputSteram, OutputSteram, Reader, Writer). Dlatego przetwarzanie (automatyczna transformacja) danych jest logicznie oderwana od fizycznego strumienia, stanowi swoistą na niego nakładkę. Zatem zastosowanie klas przetwarzających wymaga: stworzenia obiektu związanego z fizycznym źródłem/odbiornikiem, stworzenie obiektu odpowiedniej klasy przetwarzającej, "nałożonego" na fizyczny strumień. Żródło:

41 Klasy przetwarzające Jak użyć klasy przetwarzającej? Zastosowanie klas przetwarzających wymaga: stworzenia obiektu związanego z fizycznym źródłem/odbiornikiem stworzenie obiektu odpowiedniej klasy przetwarzającej, "nałożonego" na fizyczny strumień. Przykład: najpierw trzeba stworzyć strumień wczytujący z pliku, a dopiero potem go zbuforować. BufferedInputStream bufferedinputstream = new BufferedInputStream(new FileInputStream(from)); Taki "tasiemcowy" dostęp do zbuforowanych danych powoduje znaczne zwiększenie elastyczności kodu, jeśli chce się np. tylko zmienić źródło strumienia wystarczy klasę FileInputStream zastąpić inną np. PipedInputStream. Reszty kodu zaś nie trzeba zmieniać..

42 Do czego mogą służyć klasy przetwarzające? Klasy buforujące Zmniejszają liczbę fizycznych odwołań do urządzeń zewnętrznych. Przy czytaniu dużych plików tekstowych należy unikać bezpośredniego czytania za pomocą klasy FileReader. To samo dotyczy zapisu. Konwersja bajty-znaki InputStreamReader czyta bajty ze strumienia definiowanego przez InputStream (strumień bajtowy) i zamienia je na znaki (16 bitowe), używając domyślnej lub podanej strony kodowej, OutputStreamWriter wykonuje przy zapisie konwersję odwrotną. Czytanie typów prostych z bajtów DataInputStream i DataOutputStream są strumieniami bajtowymi, ale pozwalają czytać/pisać dane typów pierwotnych (np. short, char, int, float, double, boolean) ze/do strumieni bajtowych. Żródło:

43 Do czego mogą służyć klasy przetwarzające? Serializacja Klasy LineNumber... służy do "utrwalania" obiektów po to, by odtworzyć je w innym kontekście (przy ponownym uruchomieniu programu lub w innym miejscu, np. programie działającym w innym miejscu sieci po przekazaniu "utrwalonego" obiektu przez socket), zlicza wiersze strumienia przy czytaniu (i pozwala w każdym momencie uzyskać informację o numerze wiersza). Klasy Print... zawierają wygodne metody wyjścia (np. println). Niekoniecznie oznacza to drukowanie fizyczne, często wykorzystywane jest w powiązaniu z innymi strumieniami po to by łatwo wyprowadzać informacje. Żródło:

44 Przykład Buforowanie wczytywanego pliku Czytanie linia po linii z pliku tekstowego FileReader fr = new FileReader("plik.txt"); // tu powstaje związek z fizycznym źródłem BufferedReader br = new BufferedReader(fr); // tu dodajemy "opakowanie" umożliwiające buforowanie czytamy wiersz po wierszu String line; while ((line = br.readline())!= null) { // kolejny wiersz pliku: metoda readline zwraca wiersz lub null jeśli koniec pliku //... tu coś robimy z odczytanym wierszem }

45 Przykład Buforowanie wczytywanego pliku Czytanie linia po linii z pliku tekstowego FileReader fr = new FileReader("plik.txt"); // tu powstaje związek z fizycznym źródłem BufferedReader br = new BufferedReader(fr); // tu dodajemy "opakowanie" umożliwiające buforowanie czytamy wiersz po wierszu String line; while ((line = br.readline())!= null) { // kolejny wiersz pliku: metoda readline zwraca wiersz lub null jeśli koniec pliku //... tu coś robimy z odczytanym wierszem }

46 Przykład Buforowanie wczytywanego pliku Czytanie linia po linii z pliku tekstowego BufferedReader br = new BufferedReader(new FileReader("plik.txt")); // tu powstaje związek z fizycznym źródłem oraz dodajemy "opakowanie" umożliwiające buforowanie czytamy wiersz po wierszu String line; while ((line = br.readline())!= null) { // kolejny wiersz pliku: metoda readline zwraca wiersz lub null jeśli koniec pliku //... tu coś robimy z odczytanym wierszem }

47 Przykład II Przykład buforowania: program, czytający plik tekstowy i zapisujący jego zawartość do innego pliku tekstowego wraz z numerami wierszy. class Lines { public static void main(string args[]) { try { FileReader fr = new FileReader(args[0]); LineNumberReader lr = new LineNumberReader(fr); BufferedWriter bw = new BufferedWriter( new FileWriter(args[1])); String line; klasa LineNumberReader while ((line = lr.readline())!= null) { dziedziczy klasę BufferedReader, bw.write( lr.getlinenumber() + " " + line); dając możliwość uzyskania numeru wiersza bw.newline(); (metoda getlinenumber()) } lr.close(); bw.close(); } catch(ioexception exc) { System.out.println(exc.toString()); System.exit(1); } } }

48 Przykład II Przykład buforowania: program, czytający plik tekstowy i zapisujący jego zawartość do innego pliku tekstowego wraz z numerami wierszy. class Lines { public static void main(string args[]) { try { FileReader fr = new FileReader(args[0]); LineNumberReader lr = new LineNumberReader(fr); BufferedWriter bw = new BufferedWriter( new FileWriter(args[1])); String line; klasa LineNumberReader while ((line = lr.readline())!= null) { dziedziczy klasę BufferedReader, bw.write( lr.getlinenumber() + " " + line); dając możliwość uzyskania numeru wiersza bw.newline(); (metoda getlinenumber()) } lr.close(); bw.close(); } catch(ioexception exc) { System.out.println(exc.toString()); przy zamknięciu wyjściowego strumienia System.exit(1);buforowanego zawartość bufora jest zapisywana } do strumienia; istnieje też metoda void flush( ), zapisujące dane które pozostały w buforze } a nie zostały jeszcze zapisane w miejscu przeznaczenia; } takie "ręczne" opróżnianie bufora jest czasem przydatne.

49 Przykład II Przykład buforowania: program, czytający plik tekstowy i zapisujący jego zawartość do innego pliku tekstowego wraz z numerami wierszy. class Lines { public static void main(string args[]) { try { FileReader fr = new FileReader(args[0]); LineNumberReader lr = new LineNumberReader(fr); BufferedWriter bw = new BufferedWriter( new FileWriter(args[1])); String line; while ((line = lr.readline())!= null) { bw.write( lr.getlinenumber() + " " + line); bw.newline(); } lr.close(); Wyjątki: bw.close(); łapiemy IOException } catch(ioexception exc) { System.out.println(exc.toString()); System.exit(1); } } }

50 Przykład II Przykład buforowania: program, czytający plik tekstowy i zapisujący jego zawartość do innego pliku tekstowego wraz z numerami wierszy. class Lines { public static void main(string args[]) { try { FileReader fr = new FileReader(args[0]); LineNumberReader lr = new LineNumberReader(fr); BufferedWriter bw = new BufferedWriter( new FileWriter(args[1])); String line; while ((line = lr.readline())!= null) { bw.write( lr.getlinenumber() + " " + line); bw.newline(); zastosowanie metody newline() z klasy BufferedWriter } pozwala w niezależny od platformy systemowej lr.close(); sposób zapisywać separatory wierszy bw.close(); } catch(ioexception exc) { System.out.println(exc.toString()); System.exit(1); } } }

51 Klasy strumieni Szare elementy oznaczają związane z konkretnym źródłem/odbiornikiem, Białe - klasy przetwarzające (realizujące określone rodzaje przetwarzania). Żródło: Java Tutorial, Sun Microsystems 2002

52 Inne ważne klasy IO/NIO File Path Przykłady

53 File File, w przeciwieństwie do tego, co sugeruje nazwa, nie reprezentuje pliku Reprezentuje nazwę (wraz ze ścieżką) danego pliku albo nazwę (wraz ze ścieżką) zbioru plików w katalogu Konstruktory klasy file: File(String pathname) tworzy obiekt File na podstawie ścieżki podanej jako napis (to może być plik lub katalog) File(File parent, String child) tworzy obiekt File na podstawie innego obiektu File (zawierającego zbiór plików) i nazwy konkretnego pliku File(String parent, String child) tworzy obiekt File na podstawie ścieżki podanej jako napis (zawierającej zbiór plików) i nazwy konkretnego pliku File(URI uri) URI oznacza referencję Uniform Resource Identifier, pozwala m.in linkować do źródeł zewnętrznych (np. z internetu).

54 File Wybrane metody public String getname() - zwraca nazwę pliku lub katalogu w postaci napisu public String getpath() - zwraca ścieżkę w postaci napisu public boolean isfile() - sprawdza, czy podany obiekt File jest zwykłym plikiem (a nie, np. katalogiem) public String[] list() - żeby wyciągnąć nazwy pojedynczych plików ze zbioru używamy list() która zwraca tablicę znaków public boolean delete(): usuwa plik albo katalog na który wskazuje dany obiekt File

55 import java.io.file; File Przykład public class FileDemo { FileDemo.java public static void main(string[] args) { File f = null; String[] strs = { "test1.txt", "test2.txt" }; try { // dla kazdego string w tablicy strs Tworzymy nowy for (String s : strs) { // stworz nowy obiekt File obiekt File f = new File(s); // true jesli wykonywalny boolean bool = f.canexecute(); // znajdz sciezke absolutna String a = f.getabsolutepath(); Wyciągamy dane o pliku // wypisz sciezke absolutna z informacja o wykonywalnosci System.out.print(a); System.out.println(" is executable: " + bool); } } } } catch (Exception e) { // jesli pojawi sie IO exception e.printstacktrace(); } Wyjątki: łapiemy IOException

56 Path Przed Javą SE 7 zawsze używano java.io.file Jednak wraz z Javą SE 7 powstała nowa klasa, Path, która robi to samo co File, tylko lepiej i więcej Ze względu na powszechność jej użycia, prawdopodobnie nigdy nie zostanie całkowicie wycofana / zastąpiona Mamy dostęp do metadanych takich jak uprawnienia (permissions) danego pliku, wsparcie dla linków symbolicznych, lepiej sobie radzi z bardzo dużymi katalogami, metoda rename(..) działa tak samo na różnych platformach, dokładniejsze informacje dotyczące sytuacji wyjątkowych Ogólne zasady: Dla nowych projektów lepiej używać Path Na tą chwilę File nie można uznać za przestarzałe

57 Path File Path file = new File("path/to/file.txt") path = Paths.get("path/to/file.txt") file = new File(parentFile, "file.txt") path = parentpath.resolve("file.txt") file.getfilename() path.getfilename().tostring() file.delete() Files.delete(path) path.tofile() file.topath() // Microsoft Windows syntax Path path = Paths.get("C:\\home\\joe\\foo"); // Linux syntax Path path = Paths.get("/home/joe/foo");

58 JFileChooser JFileChooser chooser = new JFileChooser(); chooser.showdialog(null, "Wybierz"); chooser.getselectedfile();

59 JFileChooser Okienko pozwalające wybrać pik public class JFileChooserExample { public static void main(string[] args) { JFileChooser chooser = new JFileChooser(); PlikiWyborFile.java PlikiWyborPath.java chooser.setdialogtitle("wybierz plik"); //Otwarcie okienka; metoda blokuje się do czasu wybrania pliku lub zamknięcia okna int result = chooser.showdialog(null, "Wybierz"); if (JFileChooser.APPROVE_OPTION == result){ System.out.println("Wybrano plik: " + chooser.getselectedfile()); }else { System.out.println("Nie wybrano pliku"); }} } Wyciągamy plik tylko jeśli użytkownik go wybrał (a nie np. nacisnął X)

60 JFileChooser Okienko pozwalające wybrać pik public class JFileChooserExample { public static void main(string[] args) { JFileChooser chooser = new JFileChooser(); PlikiWyborFile.java PlikiWyborPath.java chooser.setdialogtitle("wybierz plik"); //Otwarcie okienka; metoda blokuje się do czasu wybrania pliku lub zamknięcia okna int result = chooser.showdialog(null, "Wybierz"); if (JFileChooser.APPROVE_OPTION == result){ System.out.println("Wybrano plik: " + chooser.getselectedfile().topath()); }else { System.out.println("Nie wybrano pliku"); }} }

61 Wczytywanie z pliku tekstowego PlikiTekstoweOdczyt2.java public class PlikiTekstoweOdczyt2 { public static void main(string[] args) { FileReader fr = null; String linia = ""; FileReader łączymy strumień // OTWIERANIE PLIKU: try { fr = new FileReader("plik.txt"); BufferedReader bfr = new BufferedReader(fr); // ODCZYT KOLEJNYCH LINII Z PLIKU: while ((linia = bfr.readline())!= null) { System.out.println(linia); } // ZAMYKANIE PLIKU fr.close(); } catch (Exception e) { System.out.println("BLAD IO!"); System.exit(1); } }} ze źródłem (plik.txt) BufferedReader buforujemy wczytywany plik Wczytywanie linia po linii używając readline Zamknięcie strumienia

62 public class PlikiTekstoweOdczyt { public static void main(string[] args) { FileReader fr = null; String linia = ""; PlikiTekstoweOdczyt.java Wczytywanie z pliku tekstowego // OTWIERANIE PLIKU: try { fr = new FileReader("plik.txt"); } catch (FileNotFoundException e) { System.out.println("BLAD PRZY OTWIERANIU PLIKU!"); System.exit(1); Otwarcie } BufferedReader bfr = new BufferedReader(fr); Jeden wspólny blok try-catch można zastąpić kilkoma blokami szczegółowymi // ODCZYT KOLEJNYCH LINII Z PLIKU: try { while((linia = bfr.readline())!= null){ Odczyt System.out.println(linia);} } catch (IOException e) { System.out.println("BLAD ODCZYTU Z PLIKU!"); System.exit(2); } // ZAMYKANIE PLIKU try {fr.close();} catch (IOException e) { System.out.println("BLAD PRZY ZAMYKANIU PLIKU!"); System.exit(3); }} } Zamknięcie

63 Zapisywanie do pliku tekstowego PlikiTekstoweZapis.java public class PlikiTekstoweZapis { public static void main(string[] args) { String[] linie = { "Pierwsza linia tekstu do zapisania", "druga linia - kilka liczb: (12), -23, 44.5, 2,5", "trzecia linia " }; FileWriter łączymy strumień z plikiem do zapisu (plik.txt) FileWriter fw = null; try { fw = new FileWriter("plik.txt"); BufferedWriter bw = new BufferedWriter(fw); for (int i = 0; i < linie.length; i++) { bw.write(linie[i]); bw.newline(); } bw.close(); } catch (IOException e) { e.printstacktrace(); } } } BufferedReader buforujemy zapisywany plik Zapisujemy linia po linii używając write + newline Zamknięcie pliku (zamykamy zewnętrzny strumień)

64 4 sposoby zapisu do pliku WriteToFile4Ways.java FileWriter BufferedWriter Podstawowa klasa do zapisu plików tekstowych; używaj jeśli liczba zapisów w programie jest niewielka Buforowanie umożliwia zmniejszenie ilości operacji IO; używaj jeśli spodziewasz się większej ilości zapisów do plików tekstowych OutputStream Zapisuje dane w postaci bajtów a nie znaków; nie poradzi sobie z bardziej zaawansowanym znakami Unicode, ale można używać do zapisu zwykłego tekstu ASCII; używaj jeśli potrzebujesz zapisać dane (niekoniecznie tekst) BufferedOutputStream, jeśli mamy dużo zapisów bajtowych Files.write Metoda dodana w Java SE 7, wewnętrznie wykorzystuje OutputStream

65 Random Access Files Jeśli potrzebujesz coś zapisać w konkretnym miejscu istniejącego pliku a nie tworzyć nowy lub dopisywać na końcu należy wtedy użyć RandomAccessFile pozwala na zapisanie na konkretnej pozycji w danym pliku Pozycja jest określana przez offset, przesunięcie, w stosunku do początku pliku. Uwaga, wtedy istniejący tekst zostanie NADPISANY private static void writetofile(string filepath, String data, int position) throws IOException { RandomAccessFile file = new RandomAccessFile(filePath, "rw"); file.seek(position); file.write(data.getbytes()); file.close(); } RandomAccessFileOdczyt.java RandomAccessFileZapis.java

66 Odczyt zasobów zawartych w JAR OdczytZPlikuJAR.java To się przyda na projektach jeśli mamy plik, który jest wewnątrz pliku JAR, możemy go otworzyć za pomocą wywołania: getclass().getresourceasstream("nazwa_pliku"); Przykład odczytu: InputStream inputstream = OdczytPlikuZJAR.class.getResourceAsStream("rekopis.txt"); BufferedReader bufferedreader = new BufferedReader( new InputStreamReader(inputStream, Charset.forName("UTF-8"))); String line = bufferedreader.readline(); while (line!= null) { System.out.println(line); line = bufferedreader.readline(); }

67 Kodowanie Czyli problemy z krzaczkami

68 Kodowanie Z punktu widzenia informacji na dysku nie rozróżniamy plików znakowych od bajtowych Dla obu informacja jest zapisana za pomocą bajtów W przypadku plików tekstowych należy bajty przetworzyć na znaki. Sposób w jaki bajty są zamieniane na znaki nazywany jest kodowaniem. Popularne rodzaje kodowania: ASCII - pozwala zapisać znaki podstawowego alfabetu łacińskiego wykorzystując 1 bajt na zapis jednego znaku CP pozwala zapisać znaki podstawowego alfabetu łacińskiego oraz pewne znaki diakrytyczne (w tym polskie) wykorzysując 1 bajt na zapis jednego znaku UTF-8, UTF-16, UTF-32 - pozwala zapisać dowolne znaki, zużywając 1 (UTF-8), 2 (UTF-16) lub 4 (UTF-32) bajty na znak. Najpopularniejsze jest UTF-8 Windows (języki środkowoeuropejskie) domyślnie używa CP-1250 Java używa kodowania UTF-16 jako wewnętrznej reprezentacji wszystkich struktur, również string jest zbiorem znaków kodowanych w UTF-16.

69 Kodowanie Najprostszą metodą na obsługę kodowania jest wczytanie bajtów ze strumienia wejściowego i konwersja z odpowiednim kodowaniem przy użyciu konstruktora new String(tablica_bajtów, "kodowanie"). By odczytać pliki tekstowe w jakimś kodowaniu należy uzyskać instancję klasy Charset. Do uzyskania instancji klasy Charset służy metoda Charset.forName, przyjmująca nazwę danego kodowania: System.out.println("Kodowanie UTF-32: " + Charset.forName("UTF-32")); Dodatkowo w Javie istnieje domyślne kodowanie możliwe do uzyskania za pomocą: Charset.defaultCharset(). System.out.println("Domyślne kodowanie w tym komputerze: " + Charset.defaultCharset()); Wczytanie pliku z wybranym kodowaniem: InputStreamReader streamreader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));

70 Strumienie przykładowe programy Podstawy BuforZnakowy.java przykład użycia StringBuffer Konsola.java wczytanie i wypisanie tekstu w konsoli Omawiane na wykładzie FileDemo.java używanie zmiennej File PlikiTekstoweOdczyt(2).java - odczyt z plików tekstowych PlikiTekstoweZapis.java zapis do plików tekstowych PlikiWyborFile.java, PlikiWyborPath.java użycie JFileChooser WriteToFile4Ways.java cztery sposoby na zapisywanie do plików RandomAccessFileOdczyt(Zapis).java użycie RandomAccessFile Inne ListNotes.java zapisywanie notatek do pliku tekstowego z konsoli LoadObjects.java zapisywanie obiektów klas (a nie tekstu / liczb) SaveObjects.java zapisywanie obiektów klas (a nie tekstu / liczb)

71 Więcej informacji

72 Quiz time

73 Pytanie 1 Regularnie chcielibyśmy zapisywać do pliku wyniki symulacji. Plik ma format tekstowy. Którego strumienia powinniśmy użyć do obsługi zapisu? (a) InputStream (b) OutputStream (c) FileWriter (d) BufferedWriter

74 Pytanie 1 Regularnie chcielibyśmy zapisywać do pliku wyniki symulacji. Plik ma format tekstowy. Którego strumienia powinniśmy użyć do obsługi zapisu? (a) InputStream (b) OutputStream (c) FileWriter (d) BufferedWriter

75 Pytanie 2 Ile strumieni wyjściowych możemy mieć otwartych na raz? (a) Zawsze tylko jeden na raz (b) Jeden danego typu (1 wejściowy i 1 wyjściowy) (c) Wiele (tyle, na ile pozwolą nam zasoby systemu)

76 Pytanie 2 Ile strumieni wyjściowych możemy mieć otwartych na raz? (a) Zawsze tylko jeden na raz (b) Jeden danego typu (1 wejściowy i 1 wyjściowy) (c) Wiele (tyle, na ile pozwolą nam zasoby systemu)

77 Pytanie 3 Połącz domyślne kodowania do środowiska (a) CP1250 (a) Linux (b) UTF-8 (b) Java (c) UTF-16 (c) Windows

78 Pytanie 3 Połącz domyślne kodowania do środowiska (a) CP1250 (a) Linux (b) UTF-8 (b) Java (c) UTF-16 (c) Windows

79 Pytanie 4 Jeśli napisy w programie mi się brzydko krzaczą panieĺ skim rumieĺ cem dziä cielina jak najlepiej mogę zaradzić problemowi? (a) Skasować wszystkie polskie znaki (b) Sprawdzić, w jakim kodowaniu został zapisany problematyczny tekst i odpowiednio go wczytywać (c) Zmienić ustawienia w Javie by automatycznie zawsze dobrze wczytywała wszystkie teksty

80 Pytanie 4 Jeśli napisy w programie mi się brzydko krzaczą panieĺ skim rumieĺ cem dziä cielina jak najlepiej mogę zaradzić problemowi? (a) Skasować wszystkie polskie znaki (b) Sprawdzić, w jakim kodowaniu został zapisany problematyczny tekst i odpowiednio go wczytywać (c) Zmienić ustawienia w Javie by automatycznie zawsze dobrze wczytywała wszystkie teksty Cudów ni ma.

81 Prosta grafika w Javie

82 Dodawanie obrazów do projektu Dodajemy obrazek do konkretnego pakietu 1 PPM na nazwie pakietu 4 klasy strumieni abstrakcyjnych Import 4 klasy strumieni abstrakcyjnych File System 4 klasy strumieni abstrakcyjnych Browse.. 4 klasy strumieni abstrakcyjnych Wybrać katalog 4 klasy strumieni abstrakcyjnych Wybrać plik z listy 4 klasy strumieni abstrakcyjnych Finish 4 Import 5 wybór z listy 2 3 6

83 Dodawanie obrazów do projektu Dodajemy obrazek do konkretnego pakietu PPM na nazwie pakietu 4 klasy strumieni abstrakcyjnych Import 4 klasy strumieni abstrakcyjnych File System 4 klasy strumieni abstrakcyjnych Browse.. 4 klasy strumieni abstrakcyjnych Wybrać katalog 4 klasy strumieni abstrakcyjnych Wybrać plik z listy 4 klasy strumieni abstrakcyjnych Finish 1 Import nazwa_pakietu/nazwa_obrazka.jpg 54 wybór z listy 2 3 6

84 Rysowanie obrazka na panelu public class ImagePanel extends JPanel { ImagePanel.java private BufferedImage image; public ImagePanel() { super(); // Plik umieszczony w podpakiecie "obrazki" URL resource = getclass().getresource("obrazki/zdjecie.jpg"); try { image = ImageIO.read(resource); } catch (IOException e) { System.err.println("Blad odczytu obrazka"); e.printstacktrace(); } } } Dimension dimension = new Dimension(image.getWidth(), image.getheight()); setpreferredsize(dimension); public void paintcomponent(graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.drawimage(image, 0, 0, this); }

85 Rysowanie obrazka na panelu public class ImagePanel extends JPanel { ImagePanel.java private BufferedImage image; public ImagePanel() { super(); // Plik umieszczony w podpakiecie "obrazki" URL resource = getclass().getresource("obrazki/zdjecie.jpg"); try { image = ImageIO.read(resource); } catch (IOException e) { System.err.println("Blad odczytu obrazka"); e.printstacktrace(); } } } Dimension dimension = new Dimension(image.getWidth(), image.getheight()); setpreferredsize(dimension); public void paintcomponent(graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.drawimage(image, 0, 0, this); }

86 Grafika 86/85

87 Grafika (Java2D) Klasa Graphics2D dużo większe możliwości tworzenia grafiki (m.in. łatwa obsługa przezroczystości, wypełnienia gradientowe, transformacje geometryczne, ) SimpleGraphics.java przykład wykorzystania klasy Graphics2d Gradient.java przykład wypełniania gradientowego TextureGraphics.java przykład wykorzystania tekstur SaveImage.java przykład tworzenia buforowanego obrazka i zapisu do pliku graficznego. 87/85

88 Przykład rysowania przy użyciu Graphics 2d // Tworzenie ksztaltu i rysowanie wypelnienienia - fill Ellipse2D e=new Ellipse2D.Double(80,80,180,80); g2.setpaint(color.cyan); g2.fill(e); // Kontruktor Color() z czterema argumentami float // czwarty odpowiada za "przezroczystosc": g2.setcolor(new Color(1.0f, 1.0f, 0.0f, 0.6f)); g2.fill(star); g2.setcolor(new Color (0.2f, 0.2f, 0.2f, 0.5f)); g2.draw(star); SimpleGraphics.java // Tworznie ksztaltu i rysownanie konturu - draw // set Stroke ustawia wlasciwosci linii Rectangle2D r=new Rectangle2D.Double(50,50,100,200); g2.setpaint(c0); g2.setstroke(new BasicStroke(10)); g2.draw(r); 88/85

89 Przykład wykorzystania tekstur przy użyciu Graphics 2d BufferedImage im = new BufferedImage(imW,imH, BufferedImage.TYPE_INT_RGB); // nalezy wypełnić odpowiednim wzorem BufferedImage im, np. Graphics2D g2im = im.creategraphics(); g2im.setcolor(new Color(192,192,192)); g2im.fillrect(0,0,imw,imh); //albo wczytać obrazek TextureGraphics.java // wykorzystanie tekstury do rysowania, tekstu itp. - setpaint() TexturePaint tp = new TexturePaint(im, new Rectangle(imW,imH)); g2.setpaint(tp); g2.fill(new RoundRectangle2D.Float(75,20,150,200,30,30)); g2.setfont(new Font("Verdana",Font.BOLD,24)); g2.drawstring("here's the text",10,260); 89/85

90 Przykład wykorzystania tekstur przy użyciu Graphics 2d BufferedImage im = new BufferedImage(imW,imH, BufferedImage.TYPE_INT_RGB); // nalezy wypełnić odpowiednim wzorem BufferedImage im, np. Graphics2D g2im = im.creategraphics(); g2im.setcolor(new Color(192,192,192)); g2im.fillrect(0,0,imw,imh); //albo wczytać obrazek TextureGraphics.java // wykorzystanie tekstury do rysowania, tekstu itp. - setpaint() TexturePaint tp = new TexturePaint(im, new Rectangle(imW,imH)); g2.setpaint(tp); g2.fill(new RoundRectangle2D.Float(75,20,150,200,30,30)); g2.setfont(new Font("Verdana",Font.BOLD,24)); g2.drawstring("here's the text",10,260); 90/85

91 Zapisywanie obrazka do pliku SaveImage.java BufferedImage im; // nalezy zadeklarować odpowiednio obrazek try { ImageIO.write( im, "png" /* "png" "jpeg"... format desired */, new File ( "gwiazda.png" ) /* target */ ); } catch (IOException e1) { e1.printstacktrace(); System.out.println("Blad przy zapisywaniu obrazku do pliku"); System.exit(1); } 91/85

92 Tworzenie i korzystanie z plików JAR Biblioteka JFreeChart

93 Czym są pliki JAR? JAR (ang. Java ARchive) archiwum ZIP używane do strukturalizacji i kompresji plików klas języka Java oraz powiązanych z nimi zasobów i metadanych. Archiwum JAR, o ile posiada wyszczególnioną klasę główną, może stanowić osobną aplikację

94 Plik manifestu Archiwum JAR powinno zawierać plik manifestu umieszczony w ścieżce META-INF/MANIFEST.MF, który informuje o sposobie użycia, przeznaczeniu archiwum, wskazuje klasę główną jeśli archiwum jest wykonywalne itp. Większość współczesnych IDE dla Javy pozwala na szybkie tworzenie plików JAR i generowanie plików manifestu

95 Tworzenie pliku JAR w Eclipse poprzez eksport projektu/projektów Można tworzyć zwykłe archiwum JAR, lub uruchamialne archiwum ze wskazaniem klasy głównej

96 Tworzenie własnych bibliotek Eksportując wybrany projekt/projekty do archiwum JAR można utworzyć własną bibliotekę z klasami, którą można wykorzystać w innych projektach Przykład wyeksportowanie projektu z przykładami z dzisiejszego wykładu (oprócz klas wykład dzisiaj zawiera również zasoby w postaci plików graficznych, które również będą dostępne w utworzonym archiwum)

97 JAR Export PPM na projekcie 4 klasy strumieni abstrakcyjnych Export 4 klasy strumieni abstrakcyjnych JAR file

98 Korzystanie z bibliotek w Eclipse Najszybciej: Prawym klawiszem na nazwie projektu 4 klasy strumieni abstrakcyjnych Build Path 4 klasy strumieni abstrakcyjnych Configure Build Path

99 Korzystanie z bibliotek w Eclipse następnie w zakładce Libraries opcja Add External JARs i wskazanie lokalizacji biblioteki

100 Korzystanie z bibliotek w Eclipse następnie w zakładce Libraries opcja Add External JARs i wskazanie lokalizacji biblioteki

101 Korzystanie z bibliotek w Eclipse Po poprawnym zaimportowaniu w widoku Eksploratora Pakietów powinny się pojawić pakiety z dołączonej biblioteki:

102 Korzystanie z bibliotek w Eclipse Po dołączeniu biblioteki do projektu można do tworzonych klas importować klasy zawarte w bibliotece: package pl.edu.pw.fizyka.pojava.wyklad; import pw.java.wyk5.grafika.logo; public class KorzystanieZBiblioteki { public static void main(string[] args) { Logo okno = new Logo(); okno.setvisible(true); } } Po zaimportowaniu można korzystać z tych klas, metod, konstruktorów które były deklarowane jako publiczne

103 Korzystanie z bibliotek w Eclipse package pl.edu.pw.fizyka.pojava.wyklad; import pw.java.wyk5.grafika.logo; public class KorzystanieZBiblioteki { public static void main(string[] args) { Logo okno = new Logo(); okno.setvisible(true); } } Obrazki bez problemów się wyświetlają ponieważ: - zawarte są w zaimportowanej bibliotece - w klasie Logo pobierane są metodą getresource odwołującą się do zasobu z konkretnego pakietu/podpakietu

104 Definiowanie bibliotek w Eclipse Jeśli jakaś biblioteka (zestaw bibliotek) jest często używana w wielu projektach Eclipse to warto zdefiniować w Eclipse User Library : Window 4 klasy strumieni abstrakcyjnych Preferences 4 klasy strumieni abstrakcyjnych Java 4 klasy strumieni abstrakcyjnychbuild Path 4 klasy strumieni abstrakcyjnych User Libraries, lub np. prawy klawisz mysz na projekcie 4 klasy strumieni abstrakcyjnychbuild Path 4 klasy strumieni abstrakcyjnychadd Library 4 klasy strumieni abstrakcyjnychuser Library

105 Definiowanie bibliotek w Eclipse

106 Definiowanie bibliotek w Eclipse

107 Definiowanie bibliotek w Eclipse Tak zdefiniowany zestaw bibliotek można szybko dodawać do nowych projektów:

108 Definiowanie bibliotek w Eclipse Należy pamiętać, że biblioteki użytkownika są definiowane lokalnie i przy eksporcie projektu na inny komputer trzeba ponownie zdefiniować bibliotekę lub wyeksportować również biblioteki użytkownika:

109 Umieszczanie bibliotek w projekcie Umieszczenie bibliotek (oraz wszelkich innych zasobów pliki graficzne, tekstowe, bazy danych itp.) bezpośrednio w projekcie (np. w podkatalogu /lib) ma sporo zalet: przede wszystkim eksport/import projektu jest prosty i zachowuje wszystkie zależności wygenerowane uruchamialnego pliku JAR zawierającego wszystkie niezbędne zasoby/biblioteki z poziomu Eclipse ogranicza się do kilku kliknięć.

110 Umieszczanie bibliotek w projekcie

111 Umieszczanie bibliotek w projekcie Tak umieszczone biblioteki eksportowane są wraz z całym projektem

112 Tworzenie wykonywalnego pliku JAR W Eclipse możliwe jest szybkie utworzenie uruchamialnego pliku JAR, zawierającego w razie konieczności wszystkie używane biblioteki: Export Runnable JAR file Runnable JAR file Można wybrać jedną z konfiguracji uruchamiania, na podstawie której generowany jest odpowiedni plik manifestu Można też wybrać sposób dodawania wymaganych bibliotek

113 Tworzenie wykonywalnego pliku JAR Tak utworzony plik JAR można uruchomić z linii poleceń: np.: java -jar test_java.jar albo też uruchomić inną (nie domyślną) klasę: java -jar nazwa_pliku.jar pakiet.nazwaklasy Np. dla biblioteki utworzonej wcześniej java -jar test_runnable.jar pw.java.wyk5.grafika.simplegraphics W zależności od konfiguracji systemu możliwe też może być uruchamianie aplikacji poprzez dwukrotne kliknięcie ikony pliku JAR lub poprzez menu kontekstowe.

114 Tworzenie plików EXE Na bazie wykonywalnych plików JAR możliwe jest utworzenie plików wykonywalnych dla Windows, które nie tylko pozwalałby na uruchomienie aplikacji, ale też sprawdzałyby czy zainstalowana jest odpowiednia wirtualna maszyna Javy, w razie konieczności proponowały ściągnięcie Javy Możliwe jest nawet stworzenie instalatora (np. programem Nullsoft Scriptable Install System )

115 Tworzenie plików EXE - Launch4J Executable Wrapper

116 Tworzenie plików EXE - Launch4J Executable Wrapper Program posiada sporo opcji i możliwości konfigurowania uruchomienia, ale do utworzenia pliku EXE z pliku wykonywalnego JAR wystarczy: 1. zdefiniowanie ścieżki pliku wyjściowego EXE 2. podanie ścieżki do pliku JAR () 3. podanie minimalnej wersji JRE (np lub 1.7.0) w zakładce JRE 4. zapisanie konfiguracji 5. Kliknięcie ikony Build Wrapper

117 Podanie nazw plików JAR i EXE

118 Ustawienie minimalnej wersji JRE

119 po czym można klikać ikonę BuildWrapper

120 Wynik udanego tworzenia pliku EXE

121 Wykorzystanie innych bibliotek Istnieje bardzo dużo różnych bibliotek stworzonych w Javie cześć jest odpłatna, ale jest też ogromny wybór darmowych bibliotek o rozmaitej funkcjonalności. Na stronie zebrane są biblioteki open-source dla Javy

122 Biblioteka JFreeChart

123 Biblioteka JFreeChart Aby tworzyć proste wykesy do projektu należy dodać biblioteki JFreeChart i JCommon Należy pobrać biblioteke ze strony: rozpakować plik zip, a następnie dodać dwa pliki jfreechart*.jar jcommon*.jar do projektu. W archiwum z JFreeChart w katalogu lib jest więcej plików jar, m.in. biblioteka JUnit pozwalająca na przygotowywanie testów jednostkowych

124 Wykres PieChart PieChartDemo.java

125 Wykres PieChart PieChartDemo.java DefaultPieDataset dane = new DefaultPieDataset(); dane.setvalue("nazwa dane.setvalue("nazwa dane.setvalue("nazwa dane.setvalue("nazwa dane.setvalue("nazwa 1", 2", 3", 4", 5", 10); //wartosci 25); 80); 45); 45); //Tworzymy wykres JFreeChart typu PieChart JFreeChart chart = ChartFactory.createPieChart ("Wykres typu Pie ", // Tytul wykresu dane, // dane typu PieDataset true, // legenda true, // tooltips false // Configure chart to generate URLs ); ChartFrame frame=new ChartFrame("Pie Chart",chart); frame.setvisible(true); frame.setsize(400,400);

126 Wykres PieChart PieChartDemo.java PiePlot plot = (PiePlot) chart.getplot(); plot.setexplodepercent("section A", 0.30); // wycinek z wykresu

127 PieChartDemo3D.java

128 PieChartDemo3D.java

129 RingChartDemo.java

130 XYLineChartDemo.java XYSeries series = new XYSeries("Nazwa serii"); series.add(1, 1); series.add(1, 2); series.add(2, 4);... series.add(6, 10); XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addseries(series); //Tworzymy wykres XY JFreeChart chart = ChartFactory.createXYLineChart( "Wykres XY",//Tytul "Opis osi X", // opisy osi "Opis osi Y", dataset, // Dane PlotOrientation.VERTICAL, // Orjentacja wykresu true, // legenda true, // tooltips false );

131 XYLineChartDemo.java

132 XYLineChartDemo2.java dwie serie //Tworzenie poszczegolnych serii XYSeries series = new XYSeries("Nazwa serii 1"); series.add(1, 1);... series.add(6, 10); XYSeries series2 = new XYSeries("Nazwa serii 2"); series2.add(1,0);... series2.add(6, 8); //Tworzenie kolekcji serii XYSeriesCollection dataset = new XYSeriesCollection(); //dodawanie kolejnych serii do kolekcji dataset.addseries(series); dataset.addseries(series2); // oczywiscie serie mozna usuwac: //dataset.removeseries(series2); // stosujac nazwe serii //dataset.removeseries(0); // stosujac numer serii //dataset.removeallseries(); // lub usunac wszystkie serie;

133 XYLineChartDemo2.java dwie serie

134 BarChartDemo.java DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.setvalue(6, "Seria1", "Kategoria1"); dataset.setvalue(7, "Seria1", "Kategoria2"); dataset.setvalue(8, "Seria1", "Kategoria3"); dataset.setvalue(5, "Seria1", "Kategoria4"); dataset.setvalue(12, "Seria1", "Kategoria5"); // Tworzy wykres typu Bar - słupkowy JFreeChart chart = ChartFactory.createBarChart( "Wykres typu Bar", "Opis osi X", "Opis osi Y", dataset, PlotOrientation.VERTICAL, false, true, false); //parametry podobnie jak w poprzednich przykladach ChartFrame frame1=new ChartFrame("Bar Chart",chart); frame1.setvisible(true); frame1.setsize(500,400);

135 BarChartDemo.java

136 BarChartDemo2.java dwie serie DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.setvalue(6, "Seria1", "Kategoria1"); dataset.setvalue(7, "Seria1", "Kategoria2"); dataset.setvalue(8, "Seria1", "Kategoria3"); dataset.setvalue(5, "Seria1", "Kategoria4"); dataset.setvalue(12, "Seria1", "Kategoria5"); dataset.setvalue(4, "Seria2", "Kategoria1"); dataset.setvalue(6, "Seria2", "Kategoria2"); dataset.setvalue(2, "Seria2", "Kategoria3"); dataset.setvalue(4, "Seria2", "Kategoria4"); dataset.setvalue(10, "Seria2", "Kategoria5");

137 BarChartDemo2.java dwie serie

138 BarChart3DDemo.java, jedyna różnica: JFreeChart chart = ChartFactory.createBarChart3D("Wykres typu Bar3D z dwoma seriami", "Opis osi X", "Opis osi Y", dataset, PlotOrientation.VERTICAL, false, true, false);

139 TimeSeriesChartDemo.java //tworzenie kolekcji serii TimeSeriesCollection dataset = new TimeSeriesCollection(); //tworzenie serii TimeSeries seria1 = new TimeSeries("Nazwa serii"); seria1.add(new Day(1, 1, 2018), 200); seria1.add(new Day(2, 1, 2018), 250); seria1.add(new Day(3, 1, 2018), 250); seria1.add(new Day(4, 1, 2018), 275); seria1.add(new Day(5, 1, 2018), 225); //dodawanie serii dataset.addseries(seria1); //Tworzenie wykresu typu TimeSeries JFreeChart chart = ChartFactory.createTimeSeriesChart ("Wykres","Data","Etykieta osi Y",dataset,true,true,false);

140 TimeSeriesChartDemo.java

141 TimeSeriesChartDemo2.java dwie serie TimeSeriesCollection dataset = new TimeSeriesCollection(); TimeSeries seria1 = new TimeSeries("Nazwa serii"); seria1.add(new Day(1, 1, 2013), 200); seria1.add(new Day(2, 1, 2013), 250);... seria1.add(new Day(5, 1, 2013), 225); TimeSeries seria2 = new TimeSeries("Nazwa serii2"); seria2.add(new Year(2012), 200); seria2.add(new Year(2013), 250);.. seria2.add(new Year(2016), 100); dataset.addseries(seria1); dataset.addseries(seria2);

142 TimeSeriesChartDemo2.java dwie serie

143 Wymuszanie określonego formatowania osi czasu XYPlot plot = chart.getxyplot(); DateAxis axis = (DateAxis) plot.getdomainaxis(); axis.setdateformatoverride(new SimpleDateFormat("dd-MMyyyy"));

144 WyswietlanieWykresow.java Kilka przykładów wyświetlania wykresów //szybkie wysswietlanie wykresu przy pomocy klasy ChartFrame ChartFrame frame = new ChartFrame("Szybkie wyswietlanie wykresu - klasa ChartFrame", linegraph); frame.pack(); frame.setvisible(true); // Zapisywanie wykresu do pliku JPG: try { ChartUtilities.saveChartAsJPEG(new File("LineGraph.jpg"), linegraph, 800, 600); } catch (Exception e) { System.out.println("Problem z zapisem wykresu do pliku"); }

145 WyswietlanieWykresow.java // WYSWIETLANIE WYKRESOW W OKNIE SWING // Tworzenie okienka Swing: JFrame jframe = new JFrame("Przeskaluj okno oraz kliknij prawym klawiszem myszy na obu wykresach..."); jframe.setdefaultcloseoperation(jframe.dispose_on_close); jframe.getcontentpane().setlayout(new GridLayout( 2,2)); jframe.setsize(640,480); // Dodawanie wykresu jako obraz - klasa BufferedImage BufferedImage image = linegraph.createbufferedimage(300,200); JLabel lblchart = new JLabel(); lblchart.seticon(new ImageIcon(image)); jframe.getcontentpane().add(lblchart); jframe.getcontentpane().add(new JLabel("<<< wykres dodany jako obraz (Image)")); // Dodawanie wykresu przy pomocy klasy ChartPanel ChartPanel chartpanel = new ChartPanel(lineGraph); jframe.getcontentpane().add(chartpanel); jframe.getcontentpane().add(new JLabel("<<< wykres dodany jako ChartPanel"));

146 PDFChartExample.java Przykład pokazujący jak zapisywać wykresy do pliku PDF wymagane dołączenie do projektu biblioteki Itext

147 Na stronie biblioteki IText jest znacznie więcej przykładów jej użycia:

Programowanie Obiektowe Java

Programowanie Obiektowe Java Programowanie Obiektowe Java Małgorzata Janik Zakład Fizyki Jądrowej malgorzata.janik@pw.edu.pl http://java.fizyka.pw.edu.pl/ Wykład Poniedziałek 16:15 18:00 2 h, pierwsza połowa semestru 7 wykładów :

Bardziej szczegółowo

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

Biblioteki wejścia/wyjścia. Strumienie we/wy (I/O) Biblioteki wejścia/wyjścia Strumienie we/wy (I/O) Pojęcie strumienia Strumień reprezentuje źródło lub odbiorcę danych (obiekt zdolny odbierać lub produkować dane). Strumień ukrywa szczegóły związane z

Bardziej szczegółowo

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

Wykład 4: Wejście/wyjście: strumienie Java PK1 2006_2018 Walery Susłow Programowanie komputerów Wykład 4: Wejście/wyjście: strumienie Java dr inż. Walery Susłow walery.suslow@tu.koszalin.pl Wejście/wyjście Podstawowy mechanizm wejścia-wyjścia znajduje

Bardziej szczegółowo

Strumienie i serializacja

Strumienie i serializacja Strumienie i serializacja Prezentacja dostępna na Syriuszu: http://sirius.cs.put.poznan.pl/~inf80156 Klasy: InputStream, OutputStream, Reader i Writer W Javie hierarchia strumieni oparta jest o cztery

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 8 - wprowadzenie do obsługi plików tekstowych i wyjątków mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 11 grudnia 2017 1 / 34 mgr inż. Krzysztof

Bardziej szczegółowo

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

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016 Wykład 10 05 maja 2016 Biblioteka wejścia/wyjścia (Input/Output) import java.io.*; Umożliwia przechowywania danych na nośniku zewnętrznym Dane moga być wysyłane do plików, na drukarkę, do bufora pamięci,

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna 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

Bardziej szczegółowo

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

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt JAVA Pliki - zapis i odczyt Opracował: Andrzej Nowak Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Strumienie wejścia i wyjścia Strumienie wejścia

Bardziej szczegółowo

Strumienie, pliki. Sortowanie. Wyjątki.

Strumienie, pliki. Sortowanie. Wyjątki. Strumienie, pliki. Sortowanie. Wyjątki. Serializacja Zapisuje całą klasę Plik binarny Delimiter nieokreślony Nie da się podglądać Pliki tekstowe Zapisuje wybrane informacje Plik tekstowy Delimiter ustawiamy

Bardziej szczegółowo

Tworzenie i korzystanie z plików JAR. Biblioteka JFreeChart

Tworzenie i korzystanie z plików JAR. Biblioteka JFreeChart Tworzenie i korzystanie z plików JAR Biblioteka JFreeChart Czy są pliki JAR? JAR (ang. Java ARchive) archiwum ZIP używane do strukturalizacji i kompresji plików klas języka Java oraz powiązanych z nimi

Bardziej szczegółowo

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

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE 1) Strumienie tekstowe wejściowe wprowadzanie danych Procedura korzystania ze strumieni tekstowych wejściowych

Bardziej szczegółowo

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

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu. Wstęp Java Zadanie Celem laboratorium jest zapoznanie się z podstawami platformy oraz języka Java. W ramach zadania należy przygotować aplikację zarządzania notatkami użytkownika obsługiwaną z konsoli.

Bardziej szczegółowo

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW 1. Procedura korzystania ze strumieni danych Aby utworzyć plik: 1) Należy utworzyć obiekt (np. typu FileOutputStream), powiązany ze plikiem danych binarnych (np.

Bardziej szczegółowo

dr Krzysztof Podlaski

dr Krzysztof Podlaski dr Krzysztof Podlaski Wydział Fizyki i Informatyki Stosowanej 19.11.2010 Łódź Wstęp do Java, wykład 3 1 Biblioteki standardowe Obszerny zestaw Klas i Interfejsów Obsługa Strumieni We-Wy Dysków Sieci java.io,

Bardziej szczegółowo

Strumienie, pliki. Sortowanie. Wyjątki.

Strumienie, pliki. Sortowanie. Wyjątki. Strumienie, pliki. Sortowanie. Wyjątki. Operacje I/O w Javie Serializacja Zapisuje całą klasę Plik binarny Delimiter nieokreślony Nie da się podglądać Pliki tekstowe Zapisuje wybrane informacje Plik tekstowy

Bardziej szczegółowo

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

Wstęp do Java. Operacje Wejścia-Wyjścia Programowanie Wielowątkowe. dr Krzysztof Podlaski. Wydział Fizyki i Informatyki Stosowanej Wstęp do Java Operacje Wejścia-Wyjścia Programowanie Wielowątkowe dr Krzysztof Podlaski Wydział Fizyki i Informatyki Stosowanej 19.03.2015 Łódź 1 Obsługa procesów We-Wy Biblioteki standardowe Obszerny

Bardziej szczegółowo

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

Rozdział 7 Strumienie, operacje wejścia-wyjścia Rozdział 7 Strumienie, operacje wejścia-wyjścia 7.1 Strumienie 7.2 Standardowe obsługa wejścia-wyjścia - klasy InputStream oraz OutputStream 7.2.1 Obsługa wejścia klasa InputStream 7.2.2 Obsługa wejścia

Bardziej szczegółowo

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

Wykład 10: Wejście i Wyjście Wykład 10: Wejście i Wyjście Pakiet java.io. Wejście/Wyjście Program realizuje wejście/wyjście przez użycie potoku. Ten sam sposób obsługi różnych urządzeń: konsola klawiatura plik na dysku gniazdko sieciowe,

Bardziej szczegółowo

Przygotował: Jacek Sroka 1. Java SE. Strumienie

Przygotował: Jacek Sroka 1. Java SE. Strumienie Przygotował: Jacek Sroka 1 Java SE Strumienie Przygotował: Jacek Sroka 2 Wielkość systemu we/wy Różne media konsola, pliki, połączenia sieciowe, łącza między procesami, itp. Różne sposoby sekwencyjnie,

Bardziej szczegółowo

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

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Dr inż. Zofia Kruczkiewicz Dwa sposoby tworzenia apletów Dwa sposoby

Bardziej szczegółowo

Programowanie w języku Java WYKŁAD

Programowanie w języku Java WYKŁAD Programowanie w języku Java WYKŁAD dr inż. Piotr Zabawa Certyfikowany Konsultant IBM/Rational e-mail: pzabawa@pk.edu.pl www: http://www.pk.edu.pl/~pzabawa 31.03.2014 WYKŁAD 6 Operacje we/wy Operacje we/wy

Bardziej szczegółowo

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

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja Java niezbędnik programisty spotkanie nr 11 Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja 1 Importowanie składowych statycznych Opracował Import static java.lang.system.out; //import

Bardziej szczegółowo

Programowanie Obiektowe (Java)

Programowanie Obiektowe (Java) 1. Kontenery w Javie 5 Wykład dziewiąty 1 import java.util.*; 2 3 class Element { 4 private int value; 5 6 public String tostring() { 7 return new Integer(value).toString(); 8 } 9 10 public Element(int

Bardziej szczegółowo

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

KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA Wykorzystano fragmenty wykładów M. Piotrowskiego i M. Wójcika KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA Waldemar Korłub Platformy Technologiczne KASK ETI Politechnika Gdańska Komunikacja

Bardziej szczegółowo

Bezpieczne uruchamianie apletów wg

Bezpieczne uruchamianie apletów wg Bezpieczne uruchamianie apletów wg http://java.sun.com/docs/books/tutorial/security1.2/ Zabezpieczenia przed uruchamianiem apletów na pisanych przez nieznanych autorów 1) ograniczenie możliwości odczytywania,

Bardziej szczegółowo

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

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach Programowanie w j zyku Java - Adam Krechowicz 1 Klasa File Klasa File zapewnia podstawowe operacje na plikach import java.io.file; public class FileTest { File f = new File("/home/adam/abc.txt"); f.createnewfile();

Bardziej szczegółowo

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

Inynieria oprogramowania Lecture XXX. Java TM cz IV: IO. Bartosz Walter Inynieria oprogramowania Lecture XXX Java TM cz IV: IO Bartosz Walter Plan Klasa java.io.file Strumienie tekstowe Strumienie standardowe Properties Wprowadzenie pakiet java.io.*;

Bardziej szczegółowo

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

K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA Wykorzystano fragmenty wykładów M. Piotrowskiego i M. Wójcika K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA Waldemar Korłub Platformy Technologiczne KASK ETI Politechnika Gdańska

Bardziej szczegółowo

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

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Podstawy otwartych języków programowania Wyjątki i strumienie I/O Podstawy otwartych języków programowania Wyjątki i strumienie I/O Wiktor Wandachowicz Wyjątki Podstawą filozofii Javy jest założenie, że: źle sformułowany kod nie zostanie wykonany Wyjątki są mechanizmem

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 10: Strumienie we/wy 5/13/2013 S.Deniziak:Programowanie obiektowe 1 Zarządzanie systemem plików klasa File (pakiet java.io) np. File path=new File(. ); Metody: list(), getname(),

Bardziej szczegółowo

JAVA I SIECI. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html

JAVA I SIECI. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html JAVA I SIECI ZAGADNIENIA: URL, Interfejs gniazd, transmisja SSL, protokół JNLP. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA,

Bardziej szczegółowo

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

Wykład 2. Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni poprzez sieć - obiekty URL Wykład 2 Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni poprzez sieć - obiekty URL 1. Procedura korzystania ze strumieni tekstowych wejściowych powiązanych ze standardowym

Bardziej szczegółowo

Wykład 2: Podstawy Języka

Wykład 2: Podstawy Języka Wykład 2: Podstawy Języka 1.wprowadzenie 2.podstawy języka 3.sterowanie 4.inicjacja i sprzątanie 5.kontrola dostępu 6.dziedziczenie 7.polimorfizm 8.obsługa błędów 9.kolekcje obiektów 10.wejście i wyjście

Bardziej szczegółowo

Pliki. Operacje na plikach w Pascalu

Pliki. Operacje na plikach w Pascalu Pliki. Operacje na plikach w Pascalu ścieżka zapisu, pliki elementowe, tekstowe, operacja plikowa, etapy, assign, zmienna plikowa, skojarzenie, tryby otwarcia, reset, rewrite, append, read, write, buforowanie

Bardziej szczegółowo

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

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Aplikacje w Javie wykład 9 Strumienie

Aplikacje w Javie wykład 9 Strumienie Aplikacje w Javie wykład 9 1 Strumienie Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ C. S. Horstmann,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Przygotował: Jacek Sroka 1 Programowanie obiektowe Wykład 8 Strumienie Przygotował: Jacek Sroka 2 Przypomnienie Reagowanie na sytuacje wyjątkowe Wyjątki nadzorowane i nienadzorowane Obsługa wyjątku try

Bardziej szczegółowo

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego

Bardziej szczegółowo

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

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5. Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5. Schemat Internetu R R R R R R R 2 Model Internetu 3 Protokoły komunikacyjne stosowane w sieci Internet Protokoły warstwy

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

Biblioteka standardowa - operacje wejścia/wyjścia

Biblioteka standardowa - operacje wejścia/wyjścia Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline

Bardziej szczegółowo

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

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2. Aplikacje RMI Część 2 Budowa aplikacji rozproszonych http://java.sun.com/j2se/1.5.0/docs/guide/rmi/socketfactory/index.html I. Implementacja gniazd dziedziczących po Socket i ServerSocket oraz produkcji

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych. Może posiadać określone atrybuty, a odwołanie do niego odbywa się poprzez nazwę. Każdy plik ma skończoną

Bardziej szczegółowo

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Platformy Programistyczne Zagadnienia sieciowe i wątki

Platformy Programistyczne Zagadnienia sieciowe i wątki Platformy Programistyczne Zagadnienia sieciowe i wątki Agata Migalska 27/28 maja 2014 Komunikacja sieciowa 1 Komunikacja sieciowa 2 Wiele wątków 3 Serializacja Architektura typu klient-serwer Architektura

Bardziej szczegółowo

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

MATERIAŁY POMOCNICZE DO ĆWICZENIA 3 Klasy i obiekty; atrybuty i metody MATERIAŁY POMOCNICZE DO ĆWICZENIA 3 Klasy i obiekty; atrybuty i metody Java jest językiem obiektowym. Wartości typów innych niż proste są obiektami określonych klas. Obiekty stanowią instancje klas, których

Bardziej szczegółowo

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

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą, jak

Bardziej szczegółowo

akademia androida Składowanie danych część VI

akademia androida Składowanie danych część VI akademia androida Składowanie danych część VI agenda 1. SharedPreferences. 2. Pamięć wewnętrzna i karta SD. 3. Pliki w katalogach /res/raw i /res/xml. 4. Baza danych SQLite. 5. Zadanie. 1. SharedPreferences.

Bardziej szczegółowo

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

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

Języki i metody programowania Java INF302W Wykład 4 Języki i metody programowania Java INF302W Wykład 4 Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Strumienie binarne i tekstowe niebuforowane i buforowane, obsługa plików tekstowych, wprowadzanie

Bardziej szczegółowo

Wykład PASCAL - Pliki tekstowe

Wykład PASCAL - Pliki tekstowe Podstawy programowania Wykład PASCAL - Pliki tekstowe 1 dr Artur Bartoszewski - Podstawy prograowania, sem. 1- WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą,

Bardziej szczegółowo

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

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................

Bardziej szczegółowo

Aplikacja wielowątkowa prosty komunikator

Aplikacja wielowątkowa prosty komunikator Aplikacja wielowątkowa prosty komunikator Klient 0 (host 1) Wątek 0 Komponent serwera Wątek pochodny 3.1 Klient 1 (host 2) Wątek 1 Komponent serwera Wątek pochodny 3.2 Host 4 Serwer Wątek 3 Klient 2 (host

Bardziej szczegółowo

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

Języki i metody programowania Java INF302W Wykład 3 (część 1) Języki i metody programowania Java INF302W Wykład 3 (część 1) Autor Dr inż. Zofia Kruczkiewicz Autor: Zofia Kruczkiewicz, Języki i metody programowania Java, wykład 3, część 1 1 STRUKTURA WYKŁADU 1. Wyjątki,

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Ćwiczenie 1. Przygotowanie środowiska JAVA

Ćwiczenie 1. Przygotowanie środowiska JAVA Ćwiczenie 1 Przygotowanie środowiska JAVA 1. Wprowadzenie teoretyczne Instalacja JDK (Java Development Kit) NaleŜy pobrać z java.sun.com środowisko i zainstalować je. Następnie naleŝy skonfigurować środowisko.

Bardziej szczegółowo

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Narzędzia i aplikacje Java EE Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Niniejsze opracowanie wprowadza w technologię usług sieciowych i implementację usługi na platformie Java EE (JAX-WS) z

Bardziej szczegółowo

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 2 - wprowadzenie do zmiennych mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 23 października 2017 1 / 26 mgr inż. Krzysztof Szwarc Podstawy i

Bardziej szczegółowo

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main Język obiektowy Wykład 13 Programowanie obiektowe z lotu ptaka, str 1 James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995(20latmłodszyodC) C jest językiem proceduralnym Java jest językiem

Bardziej szczegółowo

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

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne import javax.swing.*; import java.util.*; public class Napis4 { String wynik = ""; static int ile_obiektow

Bardziej szczegółowo

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna Strona 1 z 9 «Przykładowe zadania do cz. III ćwiczeń z genetyki Java pierwsze kroki w programowaniu (01)» Kategoria: java, Tagi: eclipse - java - programowanie. Autor: Grzegorz, napisał dnia: February

Bardziej szczegółowo

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java: otwórz okienko Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU klasy wewnętrzne, lokalne i anonimowe biblioteka AWT zestaw Swing JFrame JPanel komponenty obsługa zdarzeń

Bardziej szczegółowo

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

Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni przez sieć - obiekty URL 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

Bardziej szczegółowo

Wykład 4. Tablice. Pliki

Wykład 4. Tablice. Pliki Informatyka I Wykład 4. Tablice. Pliki Dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Tablice Tablica uporządkowany zbiór elementów określonego typu Każdy element tablicy posiada

Bardziej szczegółowo

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

Języki i Techniki Programowania II. Wykład 6. Wejście/Wyjście Języki i Techniki Programowania II Wykład 6 Wejście/Wyjście Podstawowy podział strumieni Strumienie: Bajtowe: (Stream) Wejściowe (InputStream, FilterInputStream...) Wyjściowe (OutputStream, FilterOutputStream...)

Bardziej szczegółowo

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje

Bardziej szczegółowo

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

Programowanie 3 - Funkcje, pliki i klasy

Programowanie 3 - Funkcje, pliki i klasy Instytut Informatyki Uniwersytetu Śląskiego Laborki funkcja; parametry funkcji; typ zwracany; typ void; funkcje bez parametrów; napis.length() - jako przykład funkcji. Zadania funkcja dodająca dwie liczby;

Bardziej szczegółowo

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

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd. -1-1. Wyjątki 2. Przykładowe zadania Wyjątki Wyjątek w Java jest obiektem, który opisuje sytuację błędną powstałą w kodzie. Zaistnienie sytuacji błędnej w metodzie powoduje utworzenie obiektu reprezentującego

Bardziej szczegółowo

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists() Paweł Gmys PHP strona 1 Lekcja 10 Uprawnienia Aby skrypt PHP mógł odwołać się do pliku, musi mieć odpowiednie uprawnienia. Szczegóły są zależne od serwera. Najczęściej chyba skrypt ma uprawnienia takie,

Bardziej szczegółowo

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

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,

Bardziej szczegółowo

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

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p. Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,

Bardziej szczegółowo

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()

Bardziej szczegółowo

Programowanie współbieżne i rozproszone

Programowanie współbieżne i rozproszone Programowanie współbieżne i rozproszone WYKŁAD 6 dr inż. Komunikowanie się procesów Z użyciem pamięci współdzielonej. wykorzystywane przede wszystkim w programowaniu wielowątkowym. Za pomocą przesyłania

Bardziej szczegółowo

Komunikacja z użyciem gniazd aplikacje klient-serwer

Komunikacja z użyciem gniazd aplikacje klient-serwer Programowanie obiektowe Komunikacja z użyciem gniazd aplikacje klient-serwer Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Architektura

Bardziej szczegółowo

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

Języki i metody programowania Java. Wykład 2 (część 2) Języki i metody programowania Java INF302W Wykład 2 (część 2) Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Identyfikacja danych reprezentowanych przez klasy podczas opracowania koncepcji prostego

Bardziej szczegółowo

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

Języki i metody programowania Java INF302W Wykład 2 (część 1) Języki i metody programowania Java INF302W Wykład 2 (część 1) Autor Dr inż. Zofia Kruczkiewicz Autor: Zofia Kruczkiewicz, Języki i metody programowania Java, wykład 2, część 1 1 Struktura wykładu 1. Identyfikacja

Bardziej szczegółowo

Programowanie, algorytmy i struktury danych

Programowanie, algorytmy i struktury danych 1/44 Programowanie, algorytmy i struktury danych materiały do wykładu: http://cez.wipb.pl/moodle/ email: m.tabedzki@pb.edu.pl strona: http://aragorn.pb.bialystok.pl/~tabedzki/ Marek Tabędzki Wymagania

Bardziej szczegółowo

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

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe. SWING c.d. ZAGADNIENIA: przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe. MATERIAŁY: http://docs.oracle.com/javase/tutorial/uiswing/dnd/ http://th-www.if.uj.edu.pl/zfs/ciesla/

Bardziej szczegółowo

Programowanie strukturalne

Programowanie strukturalne Programowanie strukturalne wykład pliki tekstowe Agata Półrola Wydział Matematyki UŁ sem. letni 2011/2012 http://www.math.uni.lodz.pl/~polrola Pliki wewnętrzne i zewnętrzne Dotychczas przy pobieraniu danych

Bardziej szczegółowo

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

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie

Bardziej szczegółowo

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium cyfrowej techniki pomiarowej. Ćwiczenie 4

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium cyfrowej techniki pomiarowej. Ćwiczenie 4 Politechnika Łódzka Instytut Systemów Inżynierii Elektrycznej Laboratorium cyfrowej techniki pomiarowej Ćwiczenie 4 Zapis danych do pliku w programie LabVIEW 1. Zapis i odczyt sygnałów pomiarowych Do zapisu

Bardziej szczegółowo

Programowanie w językach

Programowanie w językach Programowanie w językach wysokiego poziomu Obsługa plików za pomocą strumieni Elektronika i Telekomunikacja, semestr III rok akademicki 2013/2014 dr inż. Paweł Myszkowski Plan zajęć a) otwieranie i zamykanie

Bardziej szczegółowo

Katalog książek cz. 2

Katalog książek cz. 2 Katalog książek cz. 2 Odczytywanie danych z XML Do ćwiczenia dołączony jest plik books.xml zawierający pełen katalog książek. Poniższy listing zawiera przykładowy fragment danych w stosowanym formacie.

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Aplikacje w Javie- wykład 11 Wątki-podstawy

Aplikacje w Javie- wykład 11 Wątki-podstawy 1 Aplikacje w Javie- wykład 11 Wątki-podstawy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ http://docs.oracle.com/javase/9/docs/

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 6, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 6, część 1 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

Bardziej szczegółowo

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA Java w 21 dni / Rogers Cadenhead. Gliwice, cop. 2016 Spis treści O autorze 11 Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA Dzień 1. Rozpoczynamy przygodę z Javą 21 Język Java 21 Programowanie obiektowe 24 Obiekty

Bardziej szczegółowo

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

System obsªugi wej±cia i wyj±cia. System obsªugi wej±cia i wyj±cia. Robert A. Kªopotek r.klopotek@uksw.edu.pl Wydziaª Matematyczno-Przyrodniczy. Szkoªa Nauk cisªych, UKSW 6.04.2017 Java I/O Java I/O (Input and Output) - jest to zaawansowany

Bardziej szczegółowo

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus

Bardziej szczegółowo

Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz

Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz Zadanie 1. Wykonanie projektu Java SE w środowisku Netbeans- File/New Project W formularzu New Project

Bardziej szczegółowo