OZ 2012/2

94 ORGANIZACIJA ZNANJA 2012, LETN. 17, ZV. 2 • Files.move(source, target); • byte[] bytes = Files.readAllBytes(path); • List<String> lines = Files. readAllLines(path, UTF_8); • // text files BufferedReader reader = Files. newBufferedReader(path, UTF_8); BufferedWriter writer = Files. newBufferedWriter(path, ISO_8859_1); • // input and output streams InputStream in = Files. newInputStream(path); OutputStream out = Files. newOutputStream(path); OutputStream out = Files. newOutputStream(path, CREATE, APPEND); V paket NIO si bili dodani tudi kanali (angl. channels ), ki predstavljajo povezave do entitet, ki so sposobne izvajati vhodno-izhodne operacije ( files, sockets ). Za operacije z datotekami skrbi razred FileChannel, ki omogoča iskanje po datoteki in zaklepanje datoteke, ter razred AsychronousFileChannel, ki zraven tega omogoča še asinhrono branje in pisanje. Za sprehajanje po datotečni drevesni strukturi je na voljo DirectoryStream, ki za delovanje uporablja manj sistemskih virov, se prilagaja velikim mapam, ima vgrajeno filtriranje ter gladi dostopne čase do oddaljenih datotečnih sistemov. Path dir = … try (DirectoryStream<Path> stream = Files. newDirectoryStream(dir)) { for(Path entry : stream) { System.out.println(entry.getFileName()); } } V Javi 7 so omogočene tudi operacije nad simboličnimi povezavami, to so datoteke z referenco na drugo datoteko. • boolean isSymLink = Files. isSymbolicLink(path); • Files.createSymbolicLink(link, target); • Path target = Files. readSymbolicLink(link); Kljub raznolikosti izvedbe glede na platformo in datotečni sistem je bila dodana razširjena podpora za atribute datotečnega sistema. Podpirati mora vsaj osnovni vmesnik za dostop do atributov, nekatere izvedbe pa omogočajo več funkcij. Osnovni vmesnik: Interface BasicFileAttributes { FileTime lastModifiedTime(); FileTime lastAccessTime(); FileTime creationTime(); long size(); boolean isRegularFile(); boolean isDirectory(); boolean isSymbolicLink(); boolean isOther(); Object fileKey(); } Osnovne atribute pridobimo z naslednjo kodo BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class); Dodan je bil nov iterator "walkFileTree", ki omogoča rekurzivno sprehajanje po drevesni strukturi. Za zagon potrebujemo začetno točko, ki jo podamo kot pot. Iterator proži "FileVisitor event" za vsako datoteko in mapo, ki jo sreča. interface FileVisitor<T> { FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs); FileVisitResult visitFile(T file, BasicFileAttributes attrs); FileVisitResult vistFileFailed(T file, IOException ioe); FileVisitResult postVisitDirectory(T dir, IOException ioe); } FileSystem Predstavlja vmesnik do datotečnega sistema in služi kot tovarna za objekte, ki dostopajo do njega. Vsebuje razred WatchService, ki omogoča registracijo v datotečni sistem in potem sledi vsem spremembam tega sistema. Ob spremembi registriranih poslušalcev Watchable se sproži dogodek WatchEvent. WatchService watcher = FileSystems. getDefault().newWatchService(); Path dir = ... WatchKey key = dir.register(watcher, ENTRY_ CREATE, ENTRY_DELETE); Spremljanje sprememb: for (;;) { WatchKey key = watcher.take(); POROČILO

RkJQdWJsaXNoZXIy MTAxMzI5