Navazujeme na minulý díl, ve kterém jsme shrnuli Opětovné vyvolání výjimek, Použití operátoru diamant a Anotace.
Java 7 představuje několik nových tříd a rozhraní pro lepší práci se souborovým systémem. Tyto třídy nahrazují třídy z balíčku java.io. Nové třídy naleznete v balíčku java.nio. Nyní se zaměříme především na java.nio. file.Path a Paths. Path objekt reprezentuje cestu k souboru či adresáři na souborovém sytému. Co vše umožňuje, vidíme na příkladu:
Lomítka v getPath fungují na všech platformách, samozřejmě na Windows systémech lze použít i dvojitá zpětná lomítka \\.
Mezi starší třídou java.io.File a novou java.nio.file.Files lze snadno přecházet pomocí metody toPath.
Toto porovnání vrátí výsledek TRUE, soubor a cesta jsou totožné. Zde navíc vidíte onen povolený dvojí zápis cesty k souboru pro všechny platformy a pro Windows. Díky třídám Path a Files snadno získáte atributy souboru či adresáře, například jejich existenci (Files.exists, Files.notExists), zda jsou souborem či adresářem (Files.isDirectory, Files.isRegularFile), zda jsou spustitelné, ke čtení, lze do nich zapisovat, jsou skryté či symbolickými linky (Files.isExecutable, Files.isReadable, Files.isWritable, Files.isHidden, Files.isSymbolicLink).
Třída Path obsahuje mnoho metod, je vhodné mít přehled, nicméně jejich výčet zde by byl zbytečný. Třída Paths pak obsahuje dvě statické metody get, jednu pro převod Stringu na Path a druhou pro převod URI na Path.
Operační systém nemusí podporovat všechna zobrazení (views) jazyka Java, proto existují tři základní postupy zjištění správného zobrazení podporovaných atributů. Výčet podporovaných atributů naleznete zde
Jednoduchým postupem si necháme zobrazit, které atributy souborového systému jsou podporovány naší aktuální platformou.
Na systému Windows 7 byste měli vidět tento výstup: acl basic owner user dos
Ale například na Ubuntu verze 14.04 s FS ext4 uvidíte tento výstup (upravte si samozřejmě vstupní soubor): basic owner user unix dos posix
acl definuje přístupová práva na systémech se souborovým systémem odvozeným od NFSv4 (tak praví Java dokumentace), nicméně převážně se objevují na operačních systémech Windows. Testoval jsem, zda se objeví ACL položka v atributu souboru na Ubuntu, kde byl soubor v adresáři namapován přes NFSv4 (localhost:/home on /mnt/a type nfs (rw,vers=4,addr=127.0.0.1,clientaddr=127.0.0.1)), ale acl se tam neobjevilo.
Pomocí FileStore zjistíte, zda daný souborový systém podporuje potřebné View.
Na Windows 7 pak uvidíte: FileAttributeView supported: false
Balíček java.nio dále nabízí podporu kopírování souborů, kopírování adresářů a kopírování InputStream do souboru. Pro uložení webové stránky do souboru například použijete:
Zkopíruje webovou stránku algoritmů. Nejprve jsem však zkoušel Seznam.cz, který bez řádku s protokolem TLSv1.2 fungoval bezproblémově a naše Algoritmy.net zobrazovaly chybu. Když jsem zadával https stránky www.algoritmy.net, dostal jsem logicky Exception: javax.net.ssl.SSLException: Received fatal alert: protocol_version, takže mne překvapilo, že stránku Seznamu to okopírovalo. Nakonec jsem si uvědomil, že máme A+ od ssllabs.com a proto nepodporujeme zastaralé zabezpečení SSL. Doplnění řádku č. 3 pak bylo nasnadě. V případě Java 8 můžete tento řádek vynechat, jelikož Java 8 standardně využívá šifrování TLSv1.2 Pokud zadáme stránky bez SSL šifrování, většina již vrací přesměrování na zabezpečenou verzi.