10 KiB
10 KiB
Práce se soubory a složkami (adresáři)
- Se soubory se dá pracovat jako s nedělitelnými jednotkami, kdy je lze přesouvat, kopírovat, mazat atd.
- Obsah souboru se rovněž dá číst a zapisovat
Základní pojmy
- Některé základní pojmy již byly zmíněny, zde budou uvedeny systematicky
Soubor a složka (adresář)
- Soubor (file)
- Základní jednotka uspořádání dat na disku (z pohledu uživatele i z pohledu programátora)
- Obsahuje data v závislosti na typu souboru
- Název souboru
- Např.
data.txt, TBBT.s10.e13.avi
- Jednoznačná identifikace souboru v rámci jedné složky
- V jedné složce nemůžou být dva soubory se stejným jménem
- POZOR!
- Linux je „case-sensitive“ (citlivý na velikost písmen), jména
soubor.txt
aSoubor.txt
jsou tedy různá a mohou být v jedné složce (ale není to rozumné) - Windows není „case-sensittive“, jména
soubor.txt
aSoubor.txt
jsou tedy stejná a nemohou být v jedné složce
- Linux je „case-sensitive“ (citlivý na velikost písmen), jména
- Délka názvu je omezena (např. ve Windows na 255 znaků), ale je dostačující
- Název může obsahovat většinu běžných znaků s několika výjimkami (např. lomítko „/“ a zpětné lomítko „\“)
- Např.
- Přípona souboru
- Vše od poslední tečky do konce názvu souboru (tj. je součástí názvu)
- Typicky udává typ souboru
- Většina souborů příponu má, ale mít ji nemusí
- Složka/adresář (folder/directory)
- Složky mají hierarchickou strukturu
- Název složky (adresáře)
- Platí stejná pravidla a omezení jako pro soubory
- Přípona složky
- Složky příponu většinou nemají
- Ale mohou ji mít
- Každá složka (adresář) může obsahovat další soubory a složky (adresáře)
- Ve skutečnosti se jedná o speciální soubor, který má v sobě (v nějaké formě) uložený seznam souborů a složek, které obsahuje
- Podrobněji viz předmět KIV/ZOS
Cesta a související pojmy
- Cesta (ke složce či k souboru)
- Posloupnost názvů složek, které jsou oddělené lomítkem „/“ (Linux i Windows) nebo zpětným lomítkem „\“ (Windows)
- Důležité složky (adresáře) se speciálním označením
- Kořenová složka (adresář) – root folder (directory)
- Složka, která je v hierarchii nejvýše (sama v žádné složce neleží)
- Označuje se lomítkem „/“ (v Linuxu i ve Windows) nebo zpětným lomítkem „\“ (ve Windows)
- Ve Windows je kořenová složka na každém logickém disku (označeném písmenem)
- V Linuxu je jen jedna kořenová složka a další disky se připojují do hierarchické struktury složek
- Lze i ve Windows, ale příliš často se to nepoužívá
- Aktuální složka (adresář) – current folder (directory)
- Složka, ve které se právě nacházíme (typicky složka, ze které je spuštěn náš program)
- Označuje se jednou tečkou „.“
- Tato speciální složka ukazuje sama na sebe a nachází se v každé složce
- Nadřazená složka (adresář) – parent folder (directory)
- Složka, která je v hierarchii bezprostředně nad aktuální složkou
- Označuje se dvěma tečkami „..“
- Tato speciální složka odkazující na nadřazenou složku aktuální složky (tj. ve které se aktuální složka nachází) se nachází v každé složce
- V kořenové složce ukazuje stejně jako „.“ sama na sebe
- Kořenová složka (adresář) – root folder (directory)
- Absolutní cesta
- Začíná v kořenové složce, začíná lomítkem
- Např. /home/skola/ppa1
- Např. D:\Users\tpotuzak\Skola\PPA1
- Ve Windows má každý logický disk (označený písmenem) svou kořenovou složku, proto je písmeno (D:) součástí absolutní cesty – v rámci jednoho disku začíná absolutní cesta „\“
- Při použití absolutní cesty je jedno, jaká je aktuální složka
- Z každé aktuální složky ukazuje na stejný objekt (složku nebo soubor)
- Relativní cesta
- Je relativní k aktuální složce – k jednomu objektu jsou relativní cesty z různých aktuálních složek různé
- Může začínat
- Aktuální složkou „.“ (v Linuxu často nutné, ve Windows není nutné) nebo názvem podřazené složky (ve Windows)
- Nadřazenou složkou „..“
- Např.
./skola/ppa1
- Úplné jméno souboru (či složky)
- Jednoznačná identifikace souboru (či složky) v rámci celého souborového systému
- Absolutní cesta včetně názvu souboru (či složky)
- Např.
D:\Users\tpotuzak\Skola\PPA1\data.txt
Rozhraní Path a třídy Paths a Files
- Pro práci se soubory jako s celky se dají využít třídy
Paths, Files
a rozhraníPath
z balíkujava.nio.file
- Rozhraní
Path
reprezentuje cestu, tj. soubor nebo adresář (složku)- Podrobně o rozhraní viz předmět KIV/OOP
- V dalším textu se budeme k rozhraní
Path
chovat, jako by to byla třída
- Třída
Files
obsahuje mnoho statických metod pro práci se soubory- Kromě práce se souborem jako celkem umožňuje i práci s obsahem souboru
- Rozhraní
- Lze pracovat se soubory i složkami
- V názvech metod se používá se výhradně název „adresář“ („directory“), název „složka“ („folder“) se nepoužívá
- S adresáři lze provádět téměř stejné operace jako se soubory (mazání, přesun, kopírování, atd.), proto existuje jedna třída pro práci jak se soubory tak s adresáři
Zajištění nezávislosti na operačním systému
- Protože různé operační systémy používají různé oddělovače složek v cestě, je ve třídě
File
definována proměnná (řetězec) s oddělovačem, která je nastavená podle operačního systému, na kterém je program spuštěnFile.separator
- Tato proměnná by se měla používat, pokud vytváříme cestu z jednotlivých jmen adresářů
- V Linuxu je její hodnota "/", ve Windows je její hodnota "\"
- Např.
String jmeno = File.separator + "ppa1" + File.separator + " data.txt";
- Třída File je z balíku java.io a původně se používala pro práci se soubory jako s celky (místo
Path
,Paths
, aFiles
)
- Pokud místo této proměnné použijeme přímo jedno z lomítek, pak je lepší použít obyčejné lomítko „/“, protože funguje na Linuxu i na Windows
- Zpětné lomítko se navíc v Javě používá pro zápis speciálních znaků (např. „\n“ pro konec řádky) a je tedy nutné ho zdvojovat „\\“
Základní operace s cestou
- Rozhraní
Path
- Používá se jako parametr v mnoha metodách třídy
Files
(jako parametr určující soubor či složku, se kterou bude metoda pracovat) - Soubor či adresář (složka) reprezentovaný instancí
Path
může, ale nemusí existovat - Obsahuje pouze operace pro práce s cestou samotnou
- Používá se jako parametr v mnoha metodách třídy
- Vytvoření nové instance
- Nová instance se nevytváří konstruktorem, ale s využitím metody třídy
get()
pomocné třídyPaths
- POZOR!
- Jedná se o jinou třídu než je rozhraní
Path
- Její metoda třídy
get()
vrací instanci rozhraníPath
- Jedná se o jinou třídu než je rozhraní
- POZOR!
Path cesta = Paths.get(retezecSCestou);
- Např.
Path soubor = Paths.get("data.txt");
- Např.
Path soubor = Paths.get("D:\\ppa1\\data.txt");
- Je vhodné používat
File.sepearator
pro oddělení jednotlivých názvů adresářů
- Nová instance se nevytváří konstruktorem, ale s využitím metody třídy
- Absolutní cesta
- Metoda
toAbsolutePath()
- Vrátí novou instanci
Path
reprezentující soubor nebo složku jako absolutní cestu- Pokud už současná instance je absolutní cesta, vrátí stejnou instanci
- Pokud je současná instance relativní cesta, vytvoří z ní absolutní doplněním aktuálního adresáře (složky)
- Metoda
- Zjištění jména souboru či adresáře (složky)
- Metoda
getFileName()
- Vrátí poslední položku cesty (za posledním oddělovačem)
- Pokud je cesta ukončena oddělovačem, nevadí to, metoda stejně vrátí poslední položku cesty, nikoliv prázdný řetězec
- Metoda
- Převod na
File
(dříve používáno místoPath
) a obráceně- Metoda instance
Path.toFile()
- Převede instanci
Path
na instanciFile
- Převede instanci
- Metoda instance
File.toPath()
- Převede instanci
File
na instanciPath
- Převede instanci
- Převod na řetězec
- Standardní metoda
toString()
- Standardní metoda
- Metoda instance
Práce se souborem nebo adresářem pomocí třídy Files
- Třída
Files
obsahuje mj. metody pro práci se souborem či adresářem jako celkem- Jedná se o metody třídy a jako parametr mají instanci rozhraní
Path
určující, s jakým souborem mají pracovat - Metody třídy
Files
pro práci se soubory a adresáři jako s celkem obecně vyhazují konkrétní výjimku odvozenou typicky odIOException
, podle toho, k jakému problému dojde
- Jedná se o metody třídy a jako parametr mají instanci rozhraní
- Zjištění existence souboru
- Metoda
Files.exists(soubor)
- Vrátí
true
, pokud zadaný soubor nebo adresář (instancePath
) fyzicky existuje na disku, jinak vrátífalse
- Vrátí
- Metoda
- Zjištění, zda se jedná o adresář
- Metoda
Files.isDirectory(soubor)
- Vrací
true
, pokud je zadaný souboru (instancePath
) adresář - Pokud objekt neexistuje, nebo je to soubor, vrací
false
- Vrací
- Metoda
- Zjištění informací o souboru nebo adresáři
- Metoda
Files.getLastModifiedTime(soubor)
- Vrátí datum a čas poslední modifikace zadaného souboru nebo adresáře jako instanci třídy
FileTime
- Metoda
toString()
této třídy vrací datum a čas v čitelném formátu
- Metoda
- Pro neexistující soubory nebo adresáře vyhodí výjimku
- Vrátí datum a čas poslední modifikace zadaného souboru nebo adresáře jako instanci třídy
- Metoda
Files.size(soubor)
- Vrátí velikost souboru v bytech
- Pro neexistující soubor vyhodí výjimku
- Pro adresář vrátí 0
- Metoda
- Smazání souboru či adresáře
- Metoda
Files.delete(soubor
- Smaže soubor nebo adresář
- Pokud soubor nebo adresář neexistuje, nebo adresář není prázdný, vyhodí výjimku
- Metoda
- Přejmenování/přesunutí souboru či adresáře
- Metoda
Files.move(původníSoubor, cílovýSoubor)
- Přejmenuje nebo přesune soubor nebo adresář
- Při neúspěchu (např. cílový soubor již existuje) vyhodí výjimku
- Metoda
- Kopírování souboru či adresáře
- Metoda
Files.copy(původníSoubor, cílovýSoubor)
- Překopíruje soubor nebo adresář
- Pokud se jedná o adresář, nezkopíruje se jeho obsah
- Při neúspěchu vyhodí výjimku
- Metoda
- Vytvoření adresáře
- Metoda
createDirectories(adresář)
- Vytvoří adresář (v případě nutnosti všechny dosud neexistující adresáře v cestě)
- Při neúspěchu vyhodí výjimku
- Metoda