OPERACJE NA PLIKACH ZAGADNIENIA: MATERIAŁY:

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

Podstawy i języki programowania

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

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

JAVA I SIECI. MATERIAŁY:

Bezpieczne uruchamianie apletów wg

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

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

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

Strumienie i serializacja

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

Programowanie obiektowe

KLASY, INTERFEJSY, ITP

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

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

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

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

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

Zaawansowane aplikacje WWW - laboratorium

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

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

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

akademia androida Składowanie danych część VI

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

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

Java techniki programowania

Katalog książek cz. 2

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

Przygotował: Jacek Sroka 1. Java SE. Strumienie

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

Tworzenie i wykorzystanie usług

AXIS2 - tworzenie usługi sieciowej i klienta Axis Data Binding. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Programowanie obiektowe

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

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

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

Aplikacje RMI Lab4

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Programowanie w języku Java WYKŁAD

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Multimedia JAVA. Historia

Programowanie obiektowe

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

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

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Programowanie obiektowe

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

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

Tworzenie projektu zawierającego aplet w środowisku NetBeans. lab1. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Języki i metody programowania Java Lab2 podejście obiektowe

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

1 Atrybuty i metody klasowe

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

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

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie w języku Java

Programowanie współbieżne Laboratorium nr 11

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

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

Wykład 7: Pakiety i Interfejsy

Programowanie rozproszone w języku Java

Strumienie, pliki. Sortowanie. Wyjątki.

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe

Wykorzystywanie parsera DOM w programach Java i PL/SQL

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

Komunikacja z użyciem gniazd aplikacje klient-serwer

Java. Programowanie Obiektowe Mateusz Cicheński

Przykłady interfejsu TCP i UDP w Javie

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Serwer współbieżny połączeniowy

Metody dostępu do danych

Wywoływanie metod zdalnych

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Programowanie obiektowe

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

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

Podstawy języka Java. przygotował:

Aplikacja wielowątkowa prosty komunikator

SOAP. Autor: Piotr Sobczak

Remote Method Invocation 17 listopada 2010

Aplikacje internetowe i rozproszone - laboratorium

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

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

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Java jako język programowania

Podejście obiektowe do budowy systemów rozproszonych

Dokumentacja do API Javy.

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Programowanie w języku Java. Bazy danych SQLite w Javie

Zaawansowane techniki programowania C#

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

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

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

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

Metody Metody, parametry, zwracanie wartości

Transkrypt:

OPERACJE NA PLIKACH ZAGADNIENIA: pakiet java.nio.fle, operacje na plikach, swobodny dostęp do plików, katalogi, archiwa. jar i manifest. MATERIAŁY: http://docs.oracle.com/javase/tutorial/essential/io/ HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 1

OPERACJE NA PLIKACH Podstawowa klasa reprezentująca plik to File (java.io.file). import java.io.file; public class FileTest { public static void listdirectory(file fdir){ File[] fa = fdir.listfiles(); if (fa==null) return; for(file f: fdir.listfiles()){ if (f.isdirectory()) listdirectory(f); System.out.println(f.getAbsolutePath()); public static void main(string[] args){ File f = new File("/"); listdirectory(f); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 2

OPERACJE NA PLIKACH Klasa File umożliwia wykonanie wielu podstawowych operacji na plikach np.: exists(); createnewfile(); createtempfile(string prefix, String suffix); delete(); deleteonexit(); renameto(file dest); mkdirs(); getparentfile(); topath(); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 3

OPERACJE NA PLIKACH Począwszy od Javy 1.7, bardziej zaawansowane operacje plikowe są dostępne poprzez klasy pakietu java.nio.file. Plik jest tutaj reprezentowany przez interfejs Path. Path p1 = Paths.get("/tmp/file"); Path p2 = FileSystems.getDefault().getPath("/tmp/file"); Path p3 = Paths.get(URI.create("file:///tmp/file")); lub Path p = (new File("/tmp/file")).toPath(); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 4

OPERACJE NA PLIKACH Podstawowe operacje na plikach wykonujemy używając metod statycznych klasy Files. Przykładowy dostęp atrybutów pliku: Path file =...; BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class); System.out.println("creationTime: " + attr.creationtime()); System.out.println("lastAccessTime: " + attr.lastaccesstime()); System.out.println("lastModifiedTime: " + attr.lastmodifiedtime()); System.out.println("isDirectory: " + attr.isdirectory()); System.out.println("isOther: " + attr.isother()); System.out.println("isRegularFile: " + attr.isregularfile()); System.out.println("isSymbolicLink: " + attr.issymboliclink()); System.out.println("size: " + attr.size()); Można także używać DosFileAttributes lub PosixFileAttributes. HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 5

DOSTĘP DO PLIKÓW Klasa posiada również metody odpowiadające za podstawowe operacje na plikach: exists, move, delete, isreadable, Można ją wykorzystać także do dostępu do plików: Charset charset = Charset.forName("US-ASCII"); String s =...; BufferedWriter writer = null; try { writer = Files.newBufferedWriter(file, charset); writer.write(s, 0, s.length()); catch (IOException x) { System.err.format("IOException: %s\n", x); finally { if (writer!= null) writer.close(); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 6

DOSTĘP DO PLIKÓW Dostęp do niewielkich plików: odczyt Path file =...; byte[] filearray; filearray = Files.readAllBytes(file); zapis: Path file =...; byte[] buf =...; Files.write(file, buf); sposób działania metody write można ustawiś za pomocą dodatkowych fag. Domyślnie plik jest tworzony lub nadpisywany. HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 7

DOSTĘP DO PLIKÓW Pliki i strumienie bajtowe: Path fin=..., fout=...; String line = null; byte data[] = "Ala ma kota".getbytes(); try{ InputStream in = Files.newInputStream(fin); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); while ((line = reader.readline())!= null) { System.out.println(line); OutputStream out = new BufferedOutputStream( fout.newoutputstream(create, APPEND)); out.write(data, 0, data.length); catch (IOException x) { System.err.println(x); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 8

DOSTĘP DO PLIKÓW - KANAŁY Strumienie odczytują/zapisują na raz bajt lub znak. Kanały (Channels) odczytują/zapisują na raz bufor, co umożliwia swobodny dostęp do pliku. Path file; // domyślny kanał ma flagę READ try{ SekableByteChannel sbc = Files.newByteChannel(file, StandardOpenOption.READ, StandardOpenOption.WRITE)) { ByteBuffer buf = ByteBuffer.allocate(10); // odczyt zgodny z domyślnym kodowaniem String encoding = System.getProperty("file.encoding"); while (sbc.read(buf) > 0) { buf.flip(); System.out.print(Charset.forName(encoding).decode(buf)); buf.clear(); catch (IOException x) { System.out.println("caught exception: " + x); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 9

SWOBODNY DOSTĘP DO PLIKÓW Interfejs SeekableByteChannel udostępnia metody pozwalające na swobodny dostęp do plików: position() - zwraca bieżącą pozycję, position(long) - ustawia pozycję, read(bytebuffer) - odczytuje dane z kanału, write(bytebuffer) - zapisuje dane do kanału, truncate(long) - nadpisuje plik połączony do kanału. Kanał utworzony metodą Path.newByteChannel(). można zrzutować na FileChannel dający więcej możliwości (np. odwzorowania pliku w pamięci w celu np. przyspieszenia dostępu) HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 10

SWOBODNY DOSTĘP DO PLIKÓW Path file = Paths.get("plik.txt"); String s = "tu bylem!"; byte data[] = s.getbytes(); ByteBuffer out = ByteBuffer.wrap(data); ByteBuffer copy = ByteBuffer.allocate(s.length()); try (FileChannel fc = (FileChannel.open(file, StandardOpenOption.READ, StandardOpenOption.WRITE))) { // Odczyt poczatkowych 10 bajtów z pliku int nread; do { nread = fc.read(copy); while (nread!= -1 && copy.hasremaining()); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 11

SWOBODNY DOSTĘP DO PLIKÓW // zapis "tu bylem!" na początku pliku (nadpisuje pierwsze 10 bajtów) fc.position(0); while (out.hasremaining()) fc.write(out); out.rewind(); // przesuniecie na koniec pliku. fc.position(fc.size() - 1); // zapisanie kopii na końcu pliku copy.flip(); while (copy.hasremaining()) fc.write(copy); // zapisanie "tu bylem!" na końcu pliku while (out.hasremaining()) fc.write(out); catch (IOException x) { System.out.println("I/O Exception: " + x); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 12

KATALOGI Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories(); for (Path name: dirs) System.err.println(name); Path dir =...; // listujemy tylko pliki *.java, *.class i *.jar try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.{java,class,jar")) { for (Path entry: stream) System.out.println(entry.getFileName()); catch (IOException x) { System.err.println(x); Path dir =...; Files.createDirectory(dir); // tworzymy katalog Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---"); FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms); Files.createDirectory(file, attr); // tworzymy katalog i nadajemy mu prawa HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 13

MONITOROWANIE KATALOGÓW public class WatchDir { private final WatchService watcher; private final Path dir = Paths.get("."); public WatchDir() throws IOException { this.watcher = FileSystems.getDefault().newWatchService(); dir.register(watcher, ENTRY_CREATE); public static void main(string[] args) throws IOException { // oczekujemy na zdarzenia new WatchDir().processEvents(); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 14

MONITOROWANIE KATALOGÓW void processevents() { while(true){ // wait for key to be signalled WatchKey key; try { key = watcher.take(); catch (InterruptedException x) { return; for (WatchEvent<?> event: key.pollevents()) { WatchEvent<Path> ev = (WatchEvent<Path>) event; Path name = ev.context(); Path child = this.dir.resolve(name); System.out.format("%s: %s\n", event.kind().name(), child); key.reset(); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 15

ARCHIWA Java implementuje strumienie realizujące kompresję danych: GZIPOutputStream gos = new GZIPOutputStream( new FileOutputStream("plik.gz")); for (int i = 0; i < 10000; i++) gos.write("ala ma kota".getbytes()); gos.close(); ZipOutputStream zos = new ZipOutputStream( new FileOutputStream("plik.zip")); for(int i=0; i<5; i++){ ZipEntry ze = new ZipEntry("plik" + i); zos.putnextentry(ze); for(int j=0; j< 1000; j++) zos.write("ala ma kota".getbytes()); zos.closeentry(); zos.close(); HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 16

ARCHIWA JAR Java wyróżnia także szczególny rodzaj archiwym ZIP: JAR (JarOutputStream, JarInputStream). Archiwa JAR zawierają pliki klas wraz z dodatkowymi zasobami potrzebnymi do działania aplikacji. Podstawowe zalety dystrybucji programów w postaci plików jar to: bezpieczeństwo: archiwa mogą być cyfrowo podpisywane, kompresja: skrócenie czasu ładowania apletu lub aplikacji, zarządzanie zawartością archiwów z poziomu języka Java, zarządzanie wersjami na poziomie pakietów oraz archiwów (Package Sealing, Package Versioning), przenośność. HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 17

JAR Archiwum jar tworzy sie używając komendy jar, np: jar cf archiwum.jar klasa1.class klasa2.class... Użyte opcje: c tworzenie pliku (create), f zawartość archiwum zostanie zapisana do pliku archiwum.jar zamiast do standardowego wyjscia (stdout); Inne najczęściej używane opcje: m do archiwum zostanie dołączony plik manifest z określonej lokalizacji, np: jar cmf plik_manifest archiwum.jar *, C zmiana katologu w trakcie działania archiwizatora, np: jar cf ImageAudio.jar -C images * -C audio *. HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 18

MANIFEST W archiwum jar znajduje się katalog META-INF a w nim plik MANIFEST.MF zawierający dodatkowe informacje o archiwum. Przykładowa zawartość: Manifest-Version: 1.0 Created-By: 1.5.0-b64 (Sun Microsystems Inc.) Ant-Version: Apache Ant 1.6.5 Main-Class: pl.edu.uj.if.wyklady.java.wyklad06 mówi, że po uruchomieniu archiwum wykonana zostanie metoda main(string[] args) zawarta w klasie Wyklad06 znajdującej się w pakiecie pl.edu.uj.if.wyklady.java. Uruchomienie pliku jar: java -jar archiwum.jar HTTP://USERS.UJ.EDU.PL/~CIESLA/ JĘZYK JAVA, FAIS UJ 2012/2013 19

DZIĘKUJĘ ZA UWAGĘ