Aplikacje w Javie wykład 9 Strumienie

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

Download "Aplikacje w Javie wykład 9 Strumienie"

Transkrypt

1 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, C. S. Horstmann, G. Cornell, Java. Podstawy, Helion, Gliwice 2013 C. S. Horstmann, Java. Techniki zaawansowane, Helion, Gliwice 2017

2 Strumienie Strumień danych oznacza ciąg danych, 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ęć, zasoby sieciowe (poprzez URL), gniazdo, potok... strumień służy do zapisywania-odczytywania informacji - dowolnych danych Program: a) kojarzy strumień z zewnętrznym źródłem/odbiornikiem, b) otwiera strumień, c) dodaje lub pobiera dane ze strumienia, d) zamyka strumień. przy czytaniu lub zapisie danych z/do strumienia mogą być wykonywane dodatkowe operacje (np. buforowanie, kodowanie-dekodowanie, kompresjadekompresja) w Javie dostarczono klas reprezentujących strumienie. Hierarchia tych klas pozwala na programowanie w sposób niezależny od konkretnych źródeł i odbiorników. 2

3 java.io java.nio 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. Oprócz tego Java dostarcza klas reprezentujących inne od strumieni obiekty operacji wejścia-wyjścia. Do klas tych należy np. klasa File z pakietu java.io - opisująca pliki i katalogi, a także - w pakiecie java.net - klasy reprezentujące obiekty "sieciowe", takie jak URL czy gniazdo (socket), mogące stanowić źródło lub odbiornik danych w sieci (w szczególności w Internecie). Obiekty tych klas nie stanowią strumieni. Do operowania na nich strumienie (lub kanały) są jednak potrzebne i możemy je uzyskać przez użycie odpowiednich konstruktorów lub metod. 3

4 Klasy strumieniowe 4 Klasy strumieniowe można podzielić na grupy wg następujących kryteriów: klasy strumieni wejściowych klasy strumieni wyjściowych (Na strumieniach możemy wykonywać dwie podstawowe operacje: odczytywanie danych i zapisywanie danych. Z tego punktu widzenia możemy mówić o strumieniach wejściowych i wyjściowych) klasy dla strumieni bajtowych klasy dla strumieni znakowych (strumienie znakowe realizują przesyłanie znaków, które w Javie są znakami Unicodu, strumienie bajtowe przesyłają bajty danych) UWAGA: Przy przetwarzaniu tekstów należy korzystać ze strumieni znakowych ze względu na to, iż w trakcie czytania/pisania wykonywane są odpowiednie operacje dekodowania/kodowania ze względu na stronę kodową właściwą dla źródła/odbiornika klasy przetwarzające klasy przedmiotowe (klasy przetwarzające implementują określone rodzaje przetwarzania strumieni, niezależnie od źródła/odbiornika, klasy przedmiotowe są związane z konkretnymi rodzajami źródła/odbiornika)

5 Klasy strumieniowe Nadklasy, z których wywodzą się wszystkie inne klasy strumieni Wejście Wyjście Strumienie bajtowe InputStream OutputStream Strumienie znakowe Reader Writer Wszystkie powyższe klasy są abstrakcyjne i zawierają deklaracje podstawowych metod przetwarzania strumieni, które podklasy winny implementować. Przy tworzeniu obiektu-strumienia strumień jest automatycznie otwierany, 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ą zapisywać pojedyncze 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 jest zwiększana; metody pozycjonowania pozwalają zmieniać bieżącą pozycję. zamykanie strumieni (metoda close()) - strumień zawsze należy zamknąć po zakończeniu operacji na nim. 5

6 Klasy strumieniowe - przykład Metody te są zazwyczaj odpowiednio przedefiniowane w klasach dziedziczących, a polimorfizm zapewnia ich właściwe użycie Przykład. Stwórzmy ogólną klasę udostępniającą kopiowanie strumieni. import java.io.*; class StreamCopier { static void copy(inputstream in, OutputStream out) throws IOException { int c; while ((c = in.read())!= -1) out.write(c); 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. 6

7 Klasy strumieniowe - przykład 7 Możemy teraz użyć metody copy wobec dowolnych strumieni z odpowiednich konkretnych klas hierarchii klas strumieniowych, np. StreamCopier.copy(input, output); Po to by kopiowanie miało sens input musi oznaczać konkretne źródło danych, a output konkretny odbiornik danych. Strumień abstrakcyjny (w którymś momencie) musi być związany z konkretnym źródłem bądź odbiornikiem. W Javie jest to możliwe głównie (ale nie tylko) dzięki wprowadzeniu na kolejnych szczeblach dziedziczenia omawianych czterech hierarchii (we-wy, bajty-znaki) konkretnych klas oznaczających różne rodzaje źródła/odbiornika danych. Można by je nazwać klasami przedmiotowymi, bowiem mają one ustalone przedmioty operacji konkretne rodzaje źródła bądź odbiornika. Źródła bądź odbiorniki danych mogą być różnorodne. Strumień może być związany np. z plikiem, z pamięcią operacyjną, z potokiem, z zasobem sieciowym, z gniazdkiem (socket)... Klasy przedmiotowe wprowadzono dla wygody operowania na konkretnych rodzajach źródeł i odbiorników.

8 Klasy przedmiotowe 8 Źródło/odbiornik Strumienie znakowe Strumienie bajtowe CharArrayReader, CharArrayWriter ByteArrayInputStream, ByteArrayOutputStream Pamięć Potok Plik StringReader, StringWriter PipedReader, PipedWriter FileReader, FileWriter StringBufferInputStream PipedInputStream, PipedOutputStream FileInputStream, FileOutputStream

9 Klasy przedmiotowe - przykład Teraz już możemy użyć przykładowej (pokazanej poprzednio) klasy StreamCopier np. do kopiowania plików binarnych public class StreamCopy1 { public static void main(string[] args) { try { InputStream in1 = new FileInputStream("in.dat"); try { OutputStream out1 = new FileOutputStream("out.dat"); try { StreamCopier.copy(in1, out1); //kopiowanie finally { out1.close(); finally { in1.close(); catch (IOException exc) {//brak pliku lub błąd WE-WY System.err.println("I/O error: " + exc); System.exit(1); 9

10 Klasy przedmiotowe przykład - try-with-resources 10 Klauzulla finally jest wykonywana niezależnie od tego czy wystapi wyjątek czy nie, dlatego umieszczamy tam metodę close(). Dla uproszczenia, w Javie 7 wprowadzono instrukcję try-with-resources: try(otwarcie zasobu1; otwarcie zasobu2;...){ //przetwarzanie zasobów która powoduje automatyczne zamknięcie zasobów, zarówno przy normalnym zakończeniu ich przetwarzania, jak i w przypadku wyrzucenia wyjątku. try(filereader in1 = new FileReader("plik0.txt"); FileWriter out1 = new FileWriter("plik1.txt"); FileInputStream in2 = new FileInputStream("in"); FileOutputStream out2 = new FileOutputStream("out")){ StreamCopier.copy(in1, out1); StreamCopier.copy(in2, out2); catch(ioexception exc) {//brak pliku lub bład WE-WY System.err.println("I/O error: " + exc); System.exit(1);

11 Java 9 - try-with-resources 11 W Java 7 i 8 nie możemy w bloku try() używać żadnych zasobów (resources), które zostały zadeklarowane na zewnątrz Try-With-Resources. W razie potrzeby w bloku try() musieliśmy stworzyć duplikat void testtry_before_java9() throws IOException{ BufferedReader reader1 = new BufferedReader(new FileReader("dane.txt")); try (BufferedReader reader2 = reader1) { System.out.println(reader2.readLine()); W Java SE 9, jeśli mamy strumień zadeklarowany (jako final lub effectively final ) na zewnątrz Try-With-Resource, to nie musimy deklarować lokalnej kopii w bloku try(). Możemy użyć poprzednio stworzonego zasobu w Try-With-Resource Statement : void testrty_java9() throws IOException{ BufferedReader reader1 = new BufferedReader(new FileReader("dane.txt")); try (reader1) { System.out.println(reader1.readLine());

12 Klasy przedmiotowe Jedną z wersji konstruktorów klas strumieniowych związanych z plikami są konstruktory, w których podajemy jako argument nazwę pliku (można też podać referenecję do obiektu klasy File), 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". strumienie wyjściowe mogą być otwarte w trybie dopisywania (należy użyć konstruktora z drugim argumentem append ustawionym na true); w takim przypadku dane będą 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), przy obsłudze wyjątków wejścia-wyjścia czasami warto zastosować metodę printstacktrace(), która wyprowadza dokładne informacje o przyczynie i miejscu wystąpienia wyjątku. Użycie klas przedmiotowych nie jest jedynym sposobem związania logicznego strumienia z fizycznym źródłem lub odbiornikiem. Inne klasy (spoza pakietu java.io, np. klasy sieciowe) mogą dostarczać metod, które zwracają jako wynik referencję do strumienia związanego z konkretnym źródłem/odbiornikiem (np. plikiem w sieci). 12

13 Klasy przetwarzające Rodzaj przetwarzania Buforowanie Filtrowanie Konwersja: bajtyznaki Konkatenacja Strumienie znakowe BufferedReader, BufferedWriter FilterReader, FilterWriter InputStreamReader, OutputStreamWriter Strumienie bajtowe BufferedInputStream, BufferedOutputStream FilterInputStream, FilterOutputStream SequenceInputStream Serializacja obiektów Konwersje danych ObjectInputStream, ObjectOutputStream DataInputStream, DataOutputStream Zliczanie wierszy LineNumberReader LineNumberInputStream Podglądanie PushbackReader PushbackInputStream Drukowanie PrintWriter PrintStream 13

14 Klasy przetwarzające Buforowanie ogranicza liczbę fizycznych odwołań do urządzeń zewnętrznych. Filtrowanie: Klasy Filter... są klasami abstrakcyjnymi, definiującymi interfejs dla rzeczywistych filtrów. Filtrami są np.: DataInputStream i DataOutputStream, BufferedInputStream i BufferedOutputStream, LineNumberInputStream, PushbackInputStream, PrintStream, Można tworzyć własne filtry. Konwersje 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ą. Konkatenacja strumieni wejściowych pozwala połączyć strumienie i traktować je jak jeden strumień. Serializacja 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), 14

15 Klasy przetwarzające 15 Konwersje danych: DataInputStream i DataOutputStream pozwalają czytać/pisać dane typów pierwotnych (np. liczby rzeczywiste) w postaci binarnej. Strumienie są tutaj strumieniami binarnymi, w związku z tym koniec strumienia rozpoznaje się jako wyjątek EOFException. Zliczanie wierszy: LineNumber... zlicza wiersze strumienia przy czytaniu (i pozwala w każdym momencie uzyskać informację o numerze wiersza). Podglądanie: PushBack.. pozwala podglądnąć następny znak/bajt w strumieniu bez "wyciągania" tego znaku/bajtu. Drukowanie: 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. Konstruktory klas przetwarzających mają jako argument referencję do obiektów podstawowych klas abstrakcyjnych hierarchii dziedziczenia (InputStream, OutputStream, 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ń.

16 Buforowanie Buforowanie ogranicza liczbę fizycznych odwołań do urządzeń zewnętrznych, dzięki temu, że fizyczny odczyt lub zapis dotyczy całych porcji danych, gromadzonych w buforze (wydzielonym obszarze pamięci). Jedno fizyczne odwołanie wczytuje dane ze strumienia do bufora lub zapisuje zawartość bufora do strumienia. W naszym programie operacje czytania lub pisania dotyczą w większości bufora (dopóki są w nim dane lub dopóki jest miejsce na dane) i tylko niekiedy powodują fizyczny odczyt (gdy bufor jest pusty) lub zapis (gdy bufor jest pełny). Np. przy czytaniu dużych plików tekstowych należy unikać bezpośredniego czytania za pomocą klasy FileReader. To samo dotyczy zapisu. Zastosowanie klasy BufferedReader (czy BufferedWriter) powinno przynieść poprawę efektywności działania programu. Ale klasa BufferedReader (BufferedWriter) jest klasą przetwarzającą, a wobec tego w jej konstruktorze nie możemy bezpośrednio podać fizycznego źródła danych. Np. przy czytaniu plików źródło podajemy przy konstrukcji obiektu typu FileReader, a po to, żeby uzyskać buforowanie, "opakowujemy" FileReadera BufferedReaderem. FileReader fr = new FileReader("plik.txt");//żródło BufferedReader br = new BufferedReader(fr);// dodajemy "opakowanie" // umożliwiające buforowanie String line;// czytamy wierszami: metoda readline zwraca wiersz // lub null jeśli koniec pliku while ((line = br.readline())!= null) { // kolejny wiersz pliku //... tu coś robimy z odczytanym wierszem 16

17 Buforowanie - przykład Przykład: program, czytający plik tekstowy i zapisujący jego zawartość do innego pliku wraz z numerami wierszy. import java.io.*; class Lines { public static void main(string args[]) { try (LineNumberReader lr = new LineNumberReader(new FileReader(args[0])); BufferedWriter bw = new BufferedWriter(new FileWriter(args[1]))) { String line; while ((line = lr.readline())!= null) { bw.write(lr.getlinenumber() + " " + line); bw.newline(); catch (IOException exc) { System.err.println(exc.toString()); System.exit(1); 17

18 Buforowanie 18 Klasa LineNumberReader dziedziczy klasę BufferedReader, dając możliwość prostego uzyskiwania informacji o numerze bieżącego wiersza (metoda getlinenumber()), do zapisu tekstu używana jest metoda write(string), zastosowanie metody newline() z klasy BufferedWriter pozwala w niezależny od platformy systemowej sposób zapisywać znak końca wierszy, przy zamknięciu (close) wyjściowego strumienia buforowanego zawartość bufora jest zapisywana do strumienia; istnieje też możliwość "ręcznego" opróżnianienia bufora przy pomocy metody void flush(), zapisującej dane, które pozostały w buforze, a nie zostały jeszcze zapisane w miejscu przeznaczenia. Działa ona dla wszystkich strumieni wyjściowych (bajtowych i znakowych).

19 19 Strumienie binarne Klasy przetwarzające DataInputStream i DataOutputStream służą do odczytu/zapisu danych typów pierwotnych w postaci binarnej (oraz łańcuchów znakowych). Metody tych klas mają postać: typ readtyp() void writetyp(typ arg) gdzie typ odpowiada nazwie któregoś z typów pierwotnych. Mamy więc np. metody int readint(), double readdouble() itp. Dane typu String mogą być zapisywane/czytane do/z strumieni binarnych za pomocą metod writeutf i readutf. Przykład. Stwórzmy klasę Obserwacje, której obiekty reprezentują obserwacje. Każda obserwacaja ma: nazwę oraz odpowiadający jej ciąg (tablicę) liczb rzeczywistych. Może to być np. maxtemp z 12 liczbami, pokazującymi maksymalną temperaturę w 12 miesiącach roku. W klasie tej zdefiniujemy dwie metody służące do zapisu obserwacji w postaci binarnej do strumienia i odczytywania binarnych strumieni obserwacji. Format zapisu obserwacji w pliku binarnym: nazwa liczba_elementów_tablicy dane_tablicy

20 Strumienie binarne - przykład import java.io.*; class Obserwacje { String name; double[] data; public Obserwacje() { public Obserwacje(String nam, double[] dat) { name = nam; data = dat; public void writeto(dataoutputstream dout)throws IOException { dout.writeutf(name); dout.writeint(data.length); for (int i=0; i<data.length; i++) dout.writedouble(data[i]); public Obserwacje readfrom(datainputstream din)throws IOException { name = din.readutf(); int n = din.readint(); data = new double[n]; for (int i=0; i<n; i++) data[i] = din.readdouble(); return this; public void show() { System.out.println(name); for (int i=0; i<data.length; i++) System.out.print(data[i] + " "); System.out.println(""); 20

21 Strumienie binarne - przykład 21 import java.io.*; class BinDat { public static void main(string args[]) throws IOException { double[] a = {1, 2, 3, 4; double[] b = {7, 8, 9, 10; //tworzymy dwie obserwacje: Obserwacje obsa = new Obserwacje("Dane A", a); Obserwacje obsb = new Obserwacje("Dane B", b); obsa.show(); obsb.show(); try (DataOutputStream out = new DataOutputStream(new FileOutputStream("dane"))) { obsa.writeto(out); //zapis obserwacji do pliku obsb.writeto(out); //zapis obserwacji do pliku try (DataInputStream in = new DataInputStream(new FileInputStream("dane"))) { // z tego samego pliku odczytujemy dane do innych obiektów-obserwacji // i jednocześnie pokazujemy odczytane dane na konsoli new Obserwacje().readFrom(in).show(); new Obserwacje().readFrom(in).show();

22 Kodowanie Java posługuje się znakami w formacie Unicode. Są to - ogólnie - wielkości 16- bitowe. Środowiska natywne (np. Windows) najczęściej zapisują teksty jako sekwencje bajtów w różnych systemach kodowania (sposób kodowania nazywamy stroną kodową). W systemie Windows jest to najczęściej Cp1250 lub UTF-8. Powstaje zatem problem pogodzenia najczęściej bajtowego charakteru plików natywnych ze strumieniami znakowymi. Strumienie znakowe FileReader i FileWriter konwertują - niewidocznie dla nas - bajtowe źródła w znaki Unicodu i odwrotnie. Wykorzystywane są tu dwie klasy: InputStreamReader i OutputStreamWriter, które dokonują właściwych konwersji w trakcie czytania/pisania. Klasy te możemy wykorzystać również samodzielnie. Jeśli w konstruktorach tych klas nie podamy strony kodowej - przy konwersjach zostanie przyjęta domyślna strona kodowa. Aby się dowiedzieć, jakie jest domyślne kodowanie używamy metody String p = System.getProperty("file.encoding"); System.out.println(p); W zależności od ustawień na danej platformie otrzymamy różne wyniki. Np. ibm-852, Cp852 (Latin 2), Cp1252 (Windows Western Europe /Latin-1) albo UTF-8. Inna wersja konstruktorów pozwala na podanie stron kodowych, które będą używane do kodownia i dekodowania bajty-znaki. 22

23 Kodowanie - przykład Przykład. Napiszmy funkcję wykonującą konwersję strumienia wejściowego is o stronie kodowej incp do strumienia os o stronie kodowej outcp import java.io.*; import java.net.url; public class URLToFile { public static void convert(inputstream is, String incp, OutputStream os, String outcp) throws IOException { try (BufferedReader in = new BufferedReader(new InputStreamReader(is, incp)); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os, outcp))){ String line; while ((line = in.readline())!= null) { out.write(line); out.newline(); public static void main(string[] args) throws IOException { convert(new URL(" "UTF-8", new FileOutputStream("kul.txt"), "Cp1250"); 23

24 Obiekty plikowe - klasa File Klasa File oznacza obiekty plikowe (pliki i katalogi). Jej metody umożliwiają m.in. uzyskiwanie informacji o plikach i katalogach, jak również wykonywanie działań na systemie plikowym. Wybrane metody klasy File boolean canread() - czy plik może być czytany? boolean canwrite()- czy plik może być zapisywany? boolean createnewfile() - tworzy nowy pusty plik static File createtempfile(string prefix, String suffix, File directory)- tworzy nowy plik tymczasowy z nazwą wg wzorca w podanym katalogu boolean delete() - usuwa plik lub katalog void deleteonexit() - zaznacza plik do usunięcia po zakończeniu programu boolean exists() - czy plik/katalog istnieje? String getname() - nazwa pliku lub katalogu String getparent() - katalog nadrzędny String getpath() - ścieżka boolean isdirectory() - czy to katalog? boolean isfile() - czy plik? 24

25 Obiekty plikowe - klasa File 25 boolean ishidden() - czy ukryty? long lastmodified() - czas ostatniej modyfikacji long length() - rozmiar String[] list() - lista nazw plików i katalogów w katalogu String[] list(filenamefilter filter) filtrowana lista nazw plików File[] listfiles() - lista plików i katalogów File[] listfiles(filefilter filter) - filtrowana lista plików i katalogów File[] listfiles(filenamefilter filter)- filtrowana lista plików i katalogów boolean mkdir() - tworzy katalog boolean renameto(file dest) zmienia nazwę/przenosi plik lub katalog. boolean setreadonly() - zaznacza jako "tylko od odczytu" URI touri()- tworzy obiekt klasy URI (Uniform Resource Identifier), reprezentujący ten obiekt plikowy FilenameFilter i FileFilter - interfejsy umożliwiające wybiórcze, wg dowolnie konstruowanych kryteriów, listowanie plików.

26 Scanner 26 Klasa java.util.scanner pozwala na łatwy rozbiór informacji tekstowej zawierającej napisy i dane typów prostych. Możliwości: działa na klasie String, plikach (File), strumieniach, kanałach, np. Scanner sc = new Scanner(System.in); Scanner sc1 = new Scanner(new File("myNumbers")); String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); do parsowania używa wyrażeń regularnych (w tym prostych separatorów, ale również dowolnych złożonych wyrażeń), łatwo rozbija teksty na wiersze (String nextline(), boolean hasnextline()), umie wyróżnić i skonwertować dane typów prostych (a także BigDecimal), pozwala na rozbiór, polegający nie tylko na wyróżnianiu symboli rozdzielonych separatorami, ale również na wyróżnianiu symboli pasujących do podanego wyrażenia regularnego (metoda findintext(...), metoda skip(...)), sposób rozbioru można zmieniać w trakcie skanowania tekstu, m.in. stosując rozliczne metody next...(), w tym takie, które pozwalają podawać różne wyrażenia regularne. pozwala na zlokalizowany rozbiór danych.

27 Scanner 27 Wybrane metody: String next() - pobieranie kolejnych elementów (ang. token) (napisów rozdzielonych separatorem domyślnie białe znaki) boolean hasnext() - sprawdza czy jest dostępny kolejny element String nextline() - pobieranie kolejnych wierszy boolean hasnextline() - sprawdza czy jest kolejna linia int nextint() - pobieranie kolejnego elementu jako liczbę całkowitą boolean hasnextint() - sprawdzanie czy następny element jest liczbą całkowitą int nextdouble() - pobieranie kolejnego elementu jako liczbę rzeczywistą boolean hasnextdouble() - sprawdzanie czy następny element jest liczbą rzeczywistą Scanner usedelimiter(string regex) - ustawia separator skanera na separator skonstruowany na podstawie parametru

28 Skaner - przykład 28 import java.util.*; class Employee { String name; double salary; Employee(String n, double s) { name = n; salary = s; public double getsalary() { return salary; public String tostring() { return name + " " + salary;

29 Skaner - przykład public class Skaner1{ public static void main(string[] args) { String s1 = "1 2 3"; String s2 = "Jan Kowalski\t1200\nA. Grabowski\t1500"; Scanner scan1 = new Scanner(s1); int suma = 0; while (scan1.hasnextint()) suma += scan1.nextint(); System.out.println("Suma = " + suma); List<Employee> list = new ArrayList<>(); Scanner scan2 = new Scanner(s2); while (scan2.hasnextline()) { Scanner scan3 = new Scanner(scan2.nextLine()).useDelimiter("\\t"); String name = scan3.next(); double salary = scan3.nextdouble(); list.add(new Employee(name, salary)); double value = 0; for (Employee emp : list) { value += emp.getsalary(); System.out.println(emp); System.out.println("Suma zarobków: " + value); 29

30 Wyrażenia regularne- podstawy Wyrażenie regularne stanowi opis wspólnych cech (składni) zbioru łańcuchów znakowych. Możemy sobie wyobrażać, że wyrażenie regularne jest pewnym wzorcem, który opisuje jeden lub wiele napisów, pasujących do tego wzorca. Wzorzec taki zapisujemy za pomocą specjalnej składni wyrażeń regularnych. Najprostszym wzorcem jest po prostu sekwencja znaków, które nie mają specjalnego znaczenia (sekwencja literałów). Np. wyrażenie regularne abc stanowi wzorzec opisujący trzy występujące po sobie znaki: a, b i c. Wzorzec ten opisuje jeden napis "abc". We wzorcach możemy stosować znaki specjalne (tzw. metaznaki) oraz tworzone za ich pomocą konstrukcje składniowe. Do znaków specjalnych należą: $ ^. * +? [ ] ( ) { \ Uwagi: jesli chcemy traktować znaki specjalne jako literały - poprzedzamy je odwrotnym ukośnikiem \. w niektórych konstrukcjach składniowych metaznaki tracą specjalne znaczenie i są traktowane literalnie. 30

31 Wyrażenia regularne- podstawy 31 Za pomocą znaków specjalnych i tworzonych za ich pomocą bardziej rozbudowanych konstrukcji składniowych opisujemy m.in. wystąpienie jednego z wielu znaków - odpowiednie konstrukcje składniowe noszą nazwę klasy znaków (np. litery lub cyfry), początek lub koniec ograniczonego ciągu znaków (np. wiersza lub słowa) - granice, powtórzenia - w składni wyrażeń regularnych opisywane przez tzw. kwantyfikatory, logiczne kombinacje wyrażeń regularnych. Np. wyrażenie regularne [0-9] stanowi wzorzec opisujący jeden znak, który może być dowolną cyfrą 0,1,2,...,9. Wzorzec ten opisuje wszystkie napisy składające się z jednej cyfry. A wyrażenie regularne a.*z (a, kropka, gwiazdka, z) opisuje dowolną sekwencję znaków, zaczynających się od litery a i kończących się literą z. Do wzorca tego pasują np. następujące napisy: "az", "abz", "a x y z".

32 Wyrażenia regularne- podstawy Wyrażeń regularnych możemy użyć m.in. do: stwierdzenia czy dany napis pasuje do podanego przez wyrażenie wzorca, stwierdzenia czy dany napis zawiera podłańcuch znakowy pasujący do podanego wzorca i ew. uzyskania tego podnapisu i/lub jego pozycji w napisie, zamiany części napisu, pasujących do wzorca na inne napisy, wyróżniania części napisu, które są rozdzielane ciągami znaków pasującymi do podanego wzorca. W Javie służą do tego klasy pakietu java.util.regex: Pattern i Matcher. Przed zastosowaniem wyrażenia regularnego do składniowej analizy jakiegoś napisu musi ono być skompilowane. Obiekty klasy Pattern reprezentują skompilowane wyrażenia regularne, a obiekty te uzyskujemy za pomocą statycznych metod klasy Pattern - compile(...), mających za argument wyrażenie regularne. Obiekty klasy Matcher wykonują operacje wyszukiwania w tekście za pomocą interpretacji skompilowanego wyrażenia regularnego i dopasowywania go do tekstu lub jego częsci. 32

33 Wyrażenia regularne- podstawy 33 Obiekt-matcher jest zawsze związany z danym wzorcem. Zatem uzyskujemy go od obiektu-wzorca za pomocą metody matcher(...) klasy Pattern, podając jako jej argument przeszukiwany tekst. Następnie możemy dokonywać różnych operacji przeszukiwania i zastępowania tekstu poprzez użycie różnych metod klasy Matcher. W szczególności: metoda matches() stara się dopasować do wzorca cały podany łańcuch znakowy, metoda find() przeszukuje wejściowy łańcuch znakowy i wyszukuje kolejne pasujące do wzorca jego podłańcuchy. Wszystkie metody dopasowania/wyszukiwania zwracają wartości typu boolean, stwierdzające dopasowanie (true) lub jego brak (false). Więcej informacji o dopasowaniu (jaki konkretnie tekst pasuje do wzorca, gdzie jest jego początek, a gdzie koniec itp.) można uzyskać odpytując matcher o aktualny jego stan za pomocą odpowiednich metod.

34 Wyrażenia regularne- podstawy Typową sekwencję operacji, potrzebnych do zastosowania wyrażeń regularnych można opisać w następujący schematyczny sposób. A) Tekst, podlegający dopasowaniu może być reprezentowany przez obiekt dowolnej klasy implementującej interfejs CharSequence (np. String, StringBuffer, CharBuffer z pakietu java.nio) np: String text = "ala-127"; B) Tworzymy wyrażenie regularne jako napis np. String regexp = "[0-9]"; C) Kompilujemy wyrażenie regularne i uzyskujemy skompilowany wzorzec. Pattern pattern = Pattern.compile(regexp); D) Tworzymy obiekt-matcher związany z danym wyrażeniem, podając przy tym tekst do dopasowania: Matcher matcher = pattern.matcher(text); E) Szukamy dopasowania tekstu ( w tekście ) zgodnie ze wzorcem np. boolean hasmatch = matcher.find(); albo: boolean ismatching = matcher.matches(); 34

35 Wyrażenia regularne- podstawy 35 Zdefiniujmy metodę, która jako argumenty otrzymuje wyrażenie regularne oraz analizowany za jego pomocą tekst, a zwraca opis wyników działania metod matches() i find(). String report(string regex, String text) { String result = "Wzorzec: \"" + regex + "\"\n" + // Kompilacja wzorca "Tekst: \"" + text + "\""; // Gdy wzorzec jest składniowo błędny // wystąpi wyjątek PatternSyntaxException Pattern pattern = null; try { pattern = Pattern.compile(regex); catch (Exception exc) { return result + "\n" + exc.getmessage(); // zwracamy komunikat o błędzie

36 Wyrażenia regularne- podstawy 36 // Uzyskanie matchera dla podanego tekstu Matcher matcher = pattern.matcher(text); // Próba dopasowania całego tekstu do wzorca boolean ismatching = matcher.matches(); result += "\nmatches(): Cały tekst" + (ismatching? "" : " NIE") + " pasuje do wzorca."; // Przywrócenie początkowej pozycji matchera matcher.reset(); // Teraz stosujemy metodę find() // Jej wywołanie zwraca true po znalezieniu pierwszego // pasującego do wzorca podłańcucha w tekście // Kolejne wywołania pozwalają wyszukiwać kolejne // pasujące podłańcuchy.

37 Wyrażenia regularne- podstawy // Wynik false oznacza, że w tekście nie ma już // pasujących podłańcuchów boolean found = matcher.find(); if (!found) result += "\nfind():nie znaleziono żadnego podłańcucha " +"pasującego do wzorca"; else do { result += "\nfind(): Dopasowano podłańcuch \"" + matcher.group() + while(matcher.find()); return result; "\" od pozycji " + matcher.start() + " do pozycji " + matcher.end() + "."; 37

38 Wyrażenia regularne- literały, klasy znaków Literały. Literały użyte w wyrażeniu regularnym są dopasowywane po kolei. Na przykład wyrażenie regularne: String regexp = "ala"; jest interpretetewane w następujący sposób: w podanym łąńcuchu wejściowym wyszukiwane są kolejno występujące po sobie znaki 'a', 'l' i 'a'. Wynikiem metody matches() jest true tylko wtedy, gdy cały tekst pasuje do tego wzorca ("ala"), metoda find() umożliwia znalezienie w tekście wielu podłańcuchów "ala". Jeśli chcemy wyszukiwać w tekście literalne znaki specjalne, to w wyrażeniu regularnym powinniśmy je poprzedzić odwrotnym ukośnikiem (nie dotyczy to metaznaków użytych w definicji klas znaków Klasy znaków. Stosując nawiasy kwadratowe możemy wprowadzać w wyrażeniu regularnym tzw. klasy znaków. Prosta klasa znaków stanowi ciąg znaków ujętych w nawiasy kwadratowe np. [123abc] Matcher dopasuje do takiego wzorca dowolny z wymienionych znaków. Jest to w istocie skrót zapisu a b c. Jeśli pierwszym znakiem w nawiasach kwadratowych jest ^, to dopasowanie nastąpi dla każdego znaku oprócz wymienionych na liście. Jest to swoista negacja klasy znaków. Np. do wzorca [^abc] będzie pasował każdy znak oprócz a, b i c. 38

39 Wyrażenia regularne- zakresy 39 Możliwe jest także formułowanie zakresów znaków (co już znacznie ułatwia zapis). Przy formułowaniu zakresów używamy naturalnego symbolu -. Przykładowe wzorce: [0-9] - dowolna cyfra, [a-za-z] - dowolna mała i duża litera alfabetu angielskiego. [a-za-z0-9] - dowolna cyfra lub litera i nieco bardziej skomplikowany przykład, w którym po slowie Numer powinna następować spacja, potem zaś jedna z cyfr 1,2,3,7,8,9, następnie dowolna cyfra, ukośnik i dowolny znak oprócz cyfr 0,1,2,3 oraz malej litery alfabetu angielskiego: "Numer [1-37-9][0-9]/[^0-3a-z]" Należy pamiętać, że klasa znaków określa jeden znak należący (lub nie) do podanego w nawiasach kwadratowych zestawu. Kolejność znaków w zestawie nie jest istotna, ale zakresy muszą być podawane w porządku rosnącym.

40 Wyrażenia regularne- zakresy 40 Ułatwieniem zapisu zakresów są tzw. klasy predefiniowane:. Dowolny znak (w zależności od opcji kompilacji wzorca może pasować lub nie do znaku końca wiersza) \d Cyfra: [0-9] \D Nie-cyfra: [^0-9] \s "Biały" znak: [ \t\n\x0b\f\r] \S Każdy znak, oprócz "białego": [^\s] \w Jeden ze znaków: [a-za-z0-9], znak "dopuszczalny w słowie" \W Znak nie będący literą lub cyfrą [^\w] Uwaga: ogólna reguła - klasy wprowadzane przez duże litery stanowią negację klas definiowanych przez małe litery. Bardzo ważną predefiniowaną klasą jest "klasa wszystkich znaków", podawana jako kropka. Za jej pomocą możemy dopasować dowolny znak. Przykład: wzorzec który dopasowuje teksty składające się z trzech dowolnych cyfr, następujących po nich trzech dowolnych znaków i dwóch znaków, nie będących cyframi.: Wzorzec: "\d\d\d...\d\d"

41 Wyrażenia regularne- klasy znakowe 41 Pewnym rozszerzeniem podstawowych predefiniowanych klas są klasy znakowe, zdefiniowane w standardzie POSIX. \p{lower Mała litera: [a-z] \p{upper Duża litera: [A-Z] \p{ascii Dowolny znak ASCII :[\x00-\x7f] \p{alpha Dowolna litera: [\p{lower\p{upper] \p{digit Cyfra: [0-9] \p{alnum Cyfra bądź litera: [\p{alpha\p{digit] \p{punct Znak punktuacji:! "#$%&'()*+,-./:;<=>?@[\]^_`{ ~ \p{graph Widzialny znak: [\p{alnum\p{punct] \p{print Drukowalny znak: [\p{graph] \p{blank Spacja lub tabulacja: [ \t] \p{cntrl Znak sterujący: [\x00-\x1f\x7f] \p{xdigit Cyfra szesnastkowa: [0-9a-fA-F] \p{space Biały znak: [ \t\n\x0b\f\r] Wypróbujmy tę składnię na przykładzie wzorca, który opisuje tekst zaczynający się od dowolnej litery, z następującym po niej dowolnym znakiem punktuacji i dowolną cyfrą. Wzorzec: "\p{alpha\p{punct\d"

42 Wyrażenia regularne- podstawy Do "dopasowywania" znaków Unicodu służą odrębne predefiniowane klasy, np.: \p{l \p{lu \p{ll \p{sc Dowolna litera (Unicode) Dowolna duża litera (Unicode) Dowolna mała litera Symbol waluty \p{innazwablokuunicode Znak należący do podanego bloku Unicode Np. wzorzec \p{ll będzie pasował do dowolnego znaku Unicode, który jest małą literą, zatem np. do polskich znaków ą, ć, ś itd. (ale oczywiście nie tylko). Jeśli chodzi nam o znaki tylko z konkretnych bloków Unicode'u (np. alfabetu greckiego, lub cyrylicy) stosujemy ostatni z podanych w tabeli wzorców, podając po słowie In (bez spacji) nazwę bloku np. \p{ingreek \p{incyrillic 42

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

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

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 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

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

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

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

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

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

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

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/ Operacje wejścia-wyjścia strumienie Pakiety IO Java dostarcza dwóch podstawowych

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

Apilkacje w środowisku Java - wykład 10 Strumienie

Apilkacje w środowisku Java - wykład 10 Strumienie Apilkacje w środowisku Java - wykład 10 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/

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

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 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

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

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

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

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

Programowanie w Javie wykład 6

Programowanie w Javie wykład 6 Programowanie w Javie wykład 6 Wyjątki Operacje na napisach cd (klasy StringBuffer, StringBuilder ) Podstawy wyrażeń regularnych Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie

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

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

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

Aplikacje w środowisku Java- wykład 3

Aplikacje w środowisku Java- wykład 3 1 Aplikacje w środowisku Java- wykład 3 Wprowadzanie danych (okna dialogowe, Scanner) Tablice Klasa Scanner + podstawy wyrażeń regularnych Typ wyliczeniowy Treści prezentowane w wykładzie zostały oparte

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 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 w środowisku graficznym- wykład 3

Programowanie w środowisku graficznym- wykład 3 1 Programowanie w środowisku graficznym- wykład 3 Wprowadzanie danych (okna dialogowe, Scanner) Tablice Klasa Scanner + podstawy wyrażeń regularnych Typ wyliczeniowy Treści prezentowane w wykładzie zostały

Bardziej szczegółowo

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

MATERIAŁY POMOCNICZE DO ĆWICZENIA 1 Aplikacja w języku Java. Pakiety i biblioteki Javy. Kompilacja i wykonanie programu Javy MATERIAŁY POMOCNICZE DO ĆWICZENIA 1 Aplikacja w języku Java Aplikacja to program zdolny do samodzielnego działania w systemie wyposażonym w interpreter Javy Aplikacje mogą działać w trybie tekstowym (aplikacje

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

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

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

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

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

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

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression) Sed edytor strumieniowy,sed wczytuje bieżący wiersz pliku do wewnętrznego bufora celem manipulowania tekstem. Wynik jest wysyłany na standardowe wyjście. Oryginalny plik nie jest nigdy zmieniany. Jeżeli

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

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

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

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

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

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ę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

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

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 Składnia języka C# (cz. 1)

Wykład 2 Składnia języka C# (cz. 1) Wizualne systemy programowania Wykład 2 Składnia języka C# (cz. 1) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Budowa projektu 2 Struktura programu

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

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

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

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

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

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

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

Metody Metody, parametry, zwracanie wartości

Metody Metody, parametry, zwracanie wartości Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca

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

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

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

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

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

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

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

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Przygotował: Jacek Sroka 1 Programowanie obiektowe Wykład 9 Serializacja Przygotował: Jacek Sroka 2 Przypomnienie Abstrakcja strumienia hierarchia binarna InputStream/OutputStream hierarchia znakowa Reader/Writer

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

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

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Stany równoważne Stany p i q są równoważne,

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

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

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

Zaawansowane techniki programowania C#

Zaawansowane techniki programowania C# Wykład 2 Piotr Błaszyński Wydział Informatyki Zachodniopomorskiego Uniwersytetu Technologicznego 18 października 2017 służą do informowania o niepowodzeniu pewnego elementu programu, dawniej używano tzw.

Bardziej szczegółowo

Podstawy obiektowości

Podstawy obiektowości Podstawy obiektowości Zad. Zamówienie 1. Napisać program do obsługi zamówień. Program powinien składać się z dwóch klas: Zamowienie oraz Pozycja, przy czym każde zamówienie zawierać może jedną lub więcej

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 11: Serializacja obiektów 5/19/2013 S.Deniziak:Programowanie obiektowe 1 Problem składowania/przesyłania danych Strumienie Tylko typy proste Konieczność ręcznego odtwarzania

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019 Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości

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

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Podstawowe części projektu w Javie

Podstawowe części projektu w Javie Podstawowe części projektu w Javie Pakiet w Javie to grupa podobnych typów klas, interfejsów i podpakietów. Pakiet w Javie może być wbudowany lub zdefiniowany przez użytkownika. Istnieje wiele wbudowanych

Bardziej szczegółowo

Platformy Programistyczne Podstawy języka Java

Platformy Programistyczne Podstawy języka Java Platformy Programistyczne Podstawy języka Java Agata Migalska 6 maja 2014 Plan wykładu 1 Sztuka wysławiania się w języku Java 2 Cały świat jest obiektem 3 Kolekcje 4 Zmienne i metody statyczne 5 Słowo

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

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

Programowanie w Javie wykład 5

Programowanie w Javie wykład 5 Programowanie w Javie wykład 5 Pobieranie danych (skaner, okna dialogowe) Operacje na napisach (klasy String, StringTokenizer, StringBuffer, StringBuilder ) Podstawy wyrażeń regularnych Treści prezentowane

Bardziej szczegółowo

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych 2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:

Bardziej szczegółowo

Multimedia JAVA. Historia

Multimedia JAVA. Historia Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania

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

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

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

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

Wykład 8: Obsługa Wyjątków Wykład 8: Obsługa Wyjątków Wyjątki Wyjątek to sytuacja nienormalna, która pojawia się w trakcie wykonania programu. W językach bez obsługi wyjątków, błędy są wykrywane i obsługiwane ręcznie, zwykle przez

Bardziej szczegółowo

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

Programowanie w środowisku graficznym- wykład 8 Kolekcje c.d. ( mapy) Strumienie Wątki-podstawy

Programowanie w środowisku graficznym- wykład 8 Kolekcje c.d. ( mapy) Strumienie Wątki-podstawy Programowanie w środowisku graficznym- wykład 8 Kolekcje c.d. ( mapy) Strumienie Wątki-podstawy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN,

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

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp. 1/14 Prototype (prototyp) Cel: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp. Przykład: Edytor 3D klient tworzy obiekty różnych kształtów

Bardziej szczegółowo

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

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,

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