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

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

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

Strumienie i serializacja

Programowanie w języku Java WYKŁAD

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

Programowanie Obiektowe (Java)

Podstawy i języki programowania

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

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

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Przygotował: Jacek Sroka 1. Java SE. Strumienie

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

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

dr Krzysztof Podlaski

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

Programowanie obiektowe

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

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

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

Strumienie, pliki. Sortowanie. Wyjątki.

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

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

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

Strumienie, pliki. Sortowanie. Wyjątki.

Programowanie Obiektowe Java

Aplikacje w Javie wykład 9 Strumienie

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

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

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

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

Programowanie obiektowe

Programowanie Obiektowe Java

Programowanie obiektowe

Bezpieczne uruchamianie apletów wg

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

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Wykład 2: Podstawy Języka

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

JAVA I SIECI. MATERIAŁY:

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

Programowanie obiektowe

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

Korzystanie z bibliotek standardowych

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

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

I/O (STRUMIENIE, PLIKI,...)

Java: Graficzne interfejsy użytkownika

Programowanie w języku Java

Apilkacje w środowisku Java - wykład 10 Strumienie

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

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

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

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

Java. Programowanie Obiektowe Mateusz Cicheński

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

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

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

Programowanie obiektowe

Aplikacja wielowątkowa prosty komunikator

Komunikacja z użyciem gniazd aplikacje klient-serwer

Wykład 4. Tablice. Pliki

Funkcje zawarte w bibliotece < io.h >

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Aplikacja wielow tkowa prosty komunikator

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

Gniazda komunikacji sieciowej w środowisku Java

Platformy Programistyczne Zagadnienia sieciowe i wątki

akademia androida Składowanie danych część VI

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

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

Funkcje zawarte w bibliotece < io.h >

Zaawansowane techniki programowania C#

Wybrane algorytmy tablicowe

Java programowanie w sieci. java.net RMI

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

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Programowanie współbieżne i rozproszone

Programowanie w Javie wykład 9 Klasy wewnętrzne, klasy anonimowe Klasy opakowujące

Aplikacje w Javie wykład 9 Strumienie

Praktyczne aspekty programowania w Javie wydajność programu w zakresie automatycznego zarządzania zasobami

Programowanie obiektowe

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

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

Programowanie rozproszone w języku Java

Biblioteka standardowa - operacje wejścia/wyjścia

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

Przykłady interfejsu TCP i UDP w Javie

Programowanie obiektowe

Java. Michał Wójcik.

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

Java, bazy danych i SSL

Programowanie sieciowe

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

Materiały do laboratorium I

Zaawansowane aplikacje WWW - laboratorium

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

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

Podstawy obiektowości

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

Transkrypt:

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 się w Javie w pakiecie java.io.*. Obejmuje on reprezentację plików i katalogów, odczyt danych z pliku i zapis danych do pliku, a także obsługę wyjątków związanych z wejściem-wyjściem. https://www.ntu.edu.sg/home/ehchua/programming/java/j5b_io.html

PK1 2006_2018 Walery Susłow Reprezentacja plików java.io.*

Klasa java.io.file Obiekty klasy java.io.file reprezentują ścieżkę do pliku albo katalogu (niezależnie od tego, czy one istnieją) Stanowią one punkt wejścia dla wszystkich operacji zapisu i odczytu danych, ale za ich pomocą nie można bezpośrednio dokonywać tych czynności File plik = new File("c:/dane.txt"); //utwórz uchwyt do pliku File katalog = new File("c:/moje dokumenty"); //do folderu File plik2 = new File(katalog, nowy_plik.txt")

Weryfikowanie właściwości pliku / katalogu Metody klasy java.io.file: String getname() zwraca nazwę pliku String getabsolutepath() zwraca pełną ścieżkę pliku boolean exists() czy plik istnieje? boolean canwrite() możliwość zapisu boolean canread() możliwość odczytu boolean isfile() czy jest plikiem? boolean isdirectory() czy jest katalogiem int length() rozmiar pliku

Weryfikowanie właściwości pliku / katalogu, cd. String[ ] list() zwraca tablicę z nazwami plików znajdujących się w katalogu boolean renameto(file newfile) zmiana nazwy boolean mkdirs() utworzenie hierarchii katalogów opisanych w konstruktorze boolean delete() kasowanie pliku boolean createnewfile() utworzenie nowego pliku

import java.io.*; import java.util.*; Wyświetlanie zawartości katalogu public class DirList { public static void main(string[] args) { File path = new File(".."); String[ ] list; list = path.list(); for (int i=0; i < list.length; i++) System.out.println(list[i]); } }

Rekursywnie wyświetla zawartość katalogu import java.io.file; public class ListDirectoryRecusive { public static void main(string[ ] args) { File dir = new File("d:\\myproject\\test"); listrecursive(dir); } public static void listrecursive(file dir) { if (dir.isdirectory()) { File[ ] items = dir.listfiles(); for (File item : items) { System.out.println(item.getAbsoluteFile()); if (item.isdirectory()) listrecursive(item); // Recursive call }} }}

Lista plików z rozszerzeniem ".java" import java.io.file; import java.io.filenamefilter; public class ListDirectoryWithFilter { public static void main(string[] args) { File dir = new File("."); // current working directory if (dir.isdirectory()) { // List only files that meet the filtering criteria // programmed in accept() method of FilenameFilter. String[] files = dir.list(new FilenameFilter() { public boolean accept(file dir, String file) { return file.endswith(".java"); } }); // an anonymous inner class as FilenameFilter for (String file : files) { System.out.println(file); } } }}

Strumienie Input & Output

Strumienie W Javie mechanizm wejścia-wyjścia opiera się na metaforze (pojęciu) strumienia (ang. stream) Strumień to tor komunikacyjny pomiędzy dowolnym źródłem i miejscem przeznaczenia danych. Zasadniczo strumienie są jednokierunkowe, tzn. z jednego końca przyjmują dane (można do nich pisać), a z drugiego wysyłają (można z nich czytać). strumień danych asp i atok am ala

Strumienie Wszystkie nowoczesne konstrukcje I/O opierają się na strumienie. Strumień zawsze jest połączony do źródła danych lub do docelowego miejsca dostawy danych. Plik jest ograniczonym obszarem danych wejściowych, gdy klawiatura nie ma zdefiniowanego końca danych. Żeby obsłużyć wejście/wyjście: import java.io.*; // Open the stream - otwórz strumień // Use the stream (read, write) - wykorzystaj strumie // Close the stream - zamknij strumień

Rodzaje strumieni Plikowe, tekstowe, buforowane. Do komunikacji z pamięcią operacyjną CharArrayReader, CharArrayWriter, ByteArrayInputStream, ByteArrayOutputStream, StringReader, StringWriter, StringBufferInputStream Do komunikacja z plikiem FileReader, FileWriter, FileInputStream, FileOutputStream Do potokowego przetwarzania danych PipedReader, PipedWriter, PipedInputStream, PipedOutputStream

Akcje za pomocą strumieni Łączenie (concatenation): SequenceInputStream Serializacja: ObjectInputStream, ObjectOutputStream Konwersja: DataInputStream, DataOutputStream Zliczanie: LineNumberReader, LineNumberInputStream Podglądanie: PushbackReader, PushbackInputStream Drukowanie: PrintWriter, PrintStream Buforowanie: BufferedReader, BufferedWriter, BufferedInputStream, BufferedOutputStream Filtrowanie: FilterReader, FilterWriter, FilterInputStream, FilterOutputStream Zamiana bajt-znak: InputStreamReader, OutputStreamWriter

Reader Strumienie znaków (Character streams) StringReader PipedReader FilterReader PushbackReader InputStreamReader FileReader CharArrayReader BufferedReader LineNumberReader

Writer Strumienie znaków (Character streams) FilterWriter StringWriter PipedWriter OutputStreamReader FileWriter CharArrayWriter BufferedWriter

InputStream Strumienie bajtowe ObjectInputStream StringBufferInputStream SequenceInputStream ByteArrayInputStream FilterInputStream PushbackInputStream BufferedInputStream DataInputStream LineNumberInputStream PipedInputStream FileInputStream

OutputStream Strumienie bajtów (Byte streams) ObjectOutputStream ByteArrayOutputStream FilterOutputStream PrintStream BufferedOutputStream DataOutputStream PipedOutputStream FileOutputStream

Strumienie plikowe FileReader FileWriter FileInputStream FileOutputStream

Powtórzmy: otwórz wykorzystaj - zamknij Przykład otwieranie strumienia: FileReader filereader = new FileReader(fileName); // Nie wołamy filename póki działa filereader Przykładowe używanie strumienia int ch; ch = filereader.read( ); // Znaczenie int zależy od kodowania pliku (ASCII, Unicode) Pamiętajmy: Strumień jest drogim mechanizmem. Istnieje ograniczenie liczby strumieni otwartych jednocześnie. Nie wolno łączyć kilka strumieni do tego samego pliku. ZAWSZE zamykamy wykorzystane strumienie.

Strumienie plikowe: kopiowanie znaków import java.io.*; public class Copy { public static void main(string[ ] args) throws IOException { File inputfile = new File("wejscie.txt"); File outputfile = new File("wyjscie.txt"); FileReader in = new FileReader(inputFile); FileWriter out = new FileWriter(outputFile); int c; while ((c = in.read())!= -1) out.write(c); in.close(); out.close(); } } Kodowanie 16bit! 8bit zgodnie z domyślnym: System.getProperty("file.encoding")

Strumienie plikowe: kopiowanie bajtów import java.io.*; public class CopyBytes { public static void main(string[ ] args) throws IOException { File inputfile = new File("wejscie.txt"); File outputfile = new File("wyjscie.txt"); FileInputStream in = new FileInputStream(inputFile); FileOutputStream out = new FileOutputStream(outputFile); int c; while ((c = in.read())!= -1) out.write(c); in.close(); out.close(); } }

Strumienie buforowane/potokowe

Strumienie buforowane/potokowe

import java.io.*; Strumienie buforowane public class RhymingWords { public static void main(string[ ] args) throws IOException { FileReader words = new FileReader( slownik.txt"); Reader rhymedwords = reverse(sort(reverse(words))); BufferedReader in = new BufferedReader(rhymedWords); String input; while ((input = in.readline())!= null) System.out.println(input); in.close(); }

Strumienie potokowe (1) public static Reader reverse(reader source) throws IOException { BufferedReader in = new BufferedReader(source); PipedWriter pipeout = new PipedWriter(); PipedReader pipein = new PipedReader(pipeOut); PrintWriter out = new PrintWriter(pipeOut); new ReverseThread(out, in).start(); } return pipein;

Strumienie potokowe (2) public static Reader sort(reader source) throws IOException { BufferedReader in = new BufferedReader(source); PipedWriter pipeout = new PipedWriter(); PipedReader pipein = new PipedReader(pipeOut); PrintWriter out = new PrintWriter(pipeOut); } } new SortThread(out, in).start(); return pipein;

Opakowanie strumieni public static Reader sort(reader source) throws IOException { BufferedReader in = new BufferedReader(source); PipedWriter pipeout = new PipedWriter(); PipedReader pipein = new PipedReader(pipeOut); PrintWriter out = new PrintWriter(pipeOut); new SortThread(out, in).start(); } return pipein;