Soubory Hlavní balíky V/V operací • Základní věci jsou v balících java.io, java.nio.file. • Základem je třída java.io.File Práce se soubory přes objekty File • Objekt třídy File je de facto nositelem jména souboru, jakási "brána" k fyzickým souborům na disku. • Nejde tedy o datovou strukturu nesoucí např. obsah souboru. • Používá se jak pro soubory, tak adresáře, linky i soubory identifikované UNC jmény • Je plně platformově nezávislé. Odlišnosti systémů souborů Na odstínění odlišností jednotlivých systémů souborů lze použít vlastností (uvádíme jejich hodnoty pro JVM pod systémem MS Windows): File.separatorChar \\ jako char File.separator totéž jako String File.pathSeparatorChar : jako char File.pathSeparator totéž jako String System.getProperty("user.dir") adresář uživatele, pod jehož UID je proces JVM spuštěn Vytvoření objektu File Pro vytvoření objektu třídy File konstruktorem (NEJEDNÁ SE PŘÍMÉ VYTVOŘENÍ SOUBORU NA 1 DISKU!) máme několik možností: new File(String _filename_) zpřístupní v aktuálním adresáři soubor s názvem filename new File(File _baseDir_, String _filename_) zpřístupní v adresáři baseDir soubor s názvem filename new File(String _baseDirName_, String _filename_) zpřístupní v adresáři se jménem baseDirName soubor s názvem filename new File(URL _url_) zpřístupní soubor se souborovým (file:) URL url Existence a povaha souboru boolean exists() vrátí true, právě když zpřístupněný soubor (nebo adresář) existuje boolean isFile() test, zda jde o soubor a nikoli adresář boolean isDirectory() test, zda jde o adresář Přístupová práva k souboru boolean canRead() mám právo čtení souboru? boolean canWrite() mám právo zápisu souboru? Vytvoření souboru/adresáře boolean createNewFile() zkusí vytvořit soubor soubor a vrací true, právě když se podaří vytvořit. boolean mkdir() obdobně pro adresář boolean mkdirs() navíc si umí dotvořit i příp. neexistující adresáře na cestě 2 Vytvoření dočasného souboru static File createTempFile(String _prefix_, String _suffix_) Vytvoření dočasného (temporary) souboru — skutečně fyzicky vytvoří dočasný soubor ve standardním, pro to určeném, adresáři (např. c:/temp) s uvedeným prefixem a sufixem názvu static File createTempFile(String _prefix_, String _suffix_, File _directory_) dtto, ale vytvoří dočasný soubor v zadaném adr. directory Smazání, přejmenování boolean delete() zrušení souboru nebo adresáře boolean renameTo(File _dest_) přejmenuje soubor nebo adresář (neumí přesun souboru/adresáře) Další vlastnosti long length() délka (velikost) souboru v bajtech long lastModified() čas poslední modifikace v ms od začátku éry — tj. ve stejných jednotkách a škále jako systémový čas vracený System.currentTimeMillis(). String getName() jen jméno souboru (tj. poslední část cesty) String getPath() celá cesta k souboru i se jménem String getAbsolutePath() absolutní cesta k souboru i se jménem String getParent() adresář, v němž je soubor nebo adresář obsažen • Blíže viz dokumentace API třídy File. Práce s adresáři • Klíčem je opět třída File, použitelná i pro adresáře • Jak např. získat (filtrovaný) seznam souborů v adresáři? 3 • Pomocí metody File[] listFiles(FileFilter ff) nebo podobné File[] listFiles(FilenameFilter fnf). • FileFilter je rozhraní s jedinou metodou boolean accept(File pathname) • obdobně FilenameFilter • Viz Popis API java.io.FilenameFilter. Rozšíření práce se soubory • Balík java.nio • Třída java.nio.file.Path • Mnoho praktických tříd a metod, v nových verzích Javy: ◦ pohotové čtení textů ze souboru, ◦ navštěvování souborů v adresáři, ** spousta dalších možností 4