Blog

Java Files, Path, čítanie zo súboru

Learn2Code tím - 17.09.2020 - Vzdělávání

File I/O (Featuring NIO.2)

Vo verzii 7 prišiel nový balík java.nio, v ktorom je nanovo urobené to, čo bolo v java.io. Chceš vedieť, ako čítať súbory (java read file)? Tak musíš vedieť, čo je to Path a Files.

Môžeš používať obidva balíky. Musíš si ale dávať pozor na to, že ak pracuješ na projekte, kde sa používa java 6 a prípadne nižšie, tak ti nepôjdu tieto nové veci. Ale uvažujme, že na takýchto starých projektoch nepracujeme a budeme si vysvetľovať veci s použitím tohto nového balíka.

Budeme si hovoriť o základných triedach Path a Files, budeme manipulovať so súbormi a priečinkami a tak podobne. Tu je zaujímavý link porovnania funkcionality spomenutých balíkov a aké chyby mala java.io:

https://docs.oracle.com/javase/tutorial/essential/io/legacy.html#mapping

Path

Jednoducho povedané je to linka na súbor alebo na priečinok v danom operačnom systéme. Súbory sú hierarchicky uložené. Vo windowse je na vrchu označenie disku napríklad C:\home\skuska. V linuxových systémoch je root začínajúci lomítkom / napríklad /home/skuska. Tu môžeme vidieť, že vo windowse a v linuxe sa používajú úplne iné oddeľovače. Na to treba pamätať.

Relatívna a absolútna cesta

Absolútnu cestu môžeme chápať ako úplnú celkovú adresu alebo cestu na súbor alebo priečinok.

C:\home\skuska je absolútna cesta, ktorá vždy obsahuje root, teda v tomto prípade označenie disku C:. Ak by som ale napísal len home\skuska\text.txt – tak vidím, že sa snažím pristúpiť na súbor text.txt, ktorý je umiestnení v priečinku home a skuska. Ale kde sa nachádza priecinok home? Bez ďalších informácii to neviem a to je relatívna cesta.

Trieda Path

Základná trieda v tomto balíku – používa sa aby uchovávala informácie o názve súboru, priečinkoch ktoré sú použité na skonštruovanie cesty aby bolo možné lokalizovať dané dokumenty alebo priečinky. Path na windowse je bude odlišná od Path na unixe.

Ak hovoríme o triede Path, tak môžeme v jednoduchosti povedať, že môžeme manipulovať s cestou, ktorá vedie k priečinkom alebo súborom.

Trieda Files

Táto trieda slúži na manipuláciu s priečinkami a súbormi. Používa triedu Path.

Keď pristupujeme k súborom alebo celkovo ku zdrojom na disku – tak sú „otvorené“. Potom s nimi pracujeme a keď už s nimi nepracujeme tak musíme zavolať „uzatvorenie“ práce s týmito zdrojmi aby ich mohol používať niekto iný.

Na automatické uzatvorenie môžeme použiť try-with-resources.

Práca so súbormi

Máš Path inštanciu, ktorá reprezentuje súbor alebo priečinok. Teraz ale ešte stále nevieš, či reálne tento súbor alebo priečinok existuje, či sa dá z neho čítať, či sa dá do neho zapisovať a podobne.


Existuje subor alebo neexistuje, môžem k nemu pristúpiť?

Path path = Paths.get("C:\\work\\tools\\Apache Software Foundation\\Tomcat6\\logs\\service-install.log");

System.out.println(Files.exists(path));

System.out.println(Files.notExists(path));

isReadable(Path)

isWritable(Path) isExecutable(Path)


Sú to rovnaké súbory? isSameFile(Path, Path)


mazanie súboru Files.delete(path);

Vyhodí to výnimku prečo sa to nepodarilo ak sa to nepodarilo. Metoda deleteIfExists(Path) tiež zmaže súbor ale ak súbor neexistuje tak sa nevyhodí výnimka.

 

kopírovanie súboru

Files.copy(source, target, REPLACE_EXISTING);

Do metody sa dajú dať varargs options. StandardCopyOption a LinkOption enums sú podporované. Všimni si, že ak dáš ctrl a click na copy metodu, tak je tam CopyOption... options. Potom klikni ctrl na copy option a zistíš že je to len interface ale v popise máš napísane, že vieš použiť StandartCopyOption čo implementuje CopyOption.

Tu si môžeš pozrieť implementácie CopyOption rozhrania.

Ak kopíruješ súbor na miesto kde sa takýto súbor už nachádza, tak sa súbor neprepíše ak nezadáš option REPLACE_EXISTING.

Priečinky sa dajú tiež kopírovať ale skopírujú sa prázdne  aj keď v nich bol nejaký súbor.

Čítanie sú súboru (read from file)

Konečne sme prišli na kus kódu, vďaka ktorému môžeš čítať zo súboru (read from file):

Path path = Paths.get("C:\\work\\tools\\Apache Software Foundation\\Tomcat6\\logs\\service-install.log");
List<String> lines = Files.readAllLines(path);


Logo facebook

Learn2Code tím

Učíme ľudí dizajnovať, robiť webstránky a programovať. Naše prezenčné kurzy nájdeš vo viacerých mestách na Slovensku a pomocou online kurzov sa môžeš vzdelávať z pohodlia domova.


Matematické operácie v Exceli

Vzdělávání

Funkcie a vzorce sú možno najvyužívanejšou časťou Excelu a v tomto blogovom príspevku sa pozrieme na najdôležitejšie matematické operácie. Pomocou...

Už 4 000 detí sa zúčastnilo webinárov STEM Kindloteka

Vzdělávání

Spoločnosť Amazon začala ponúkať v spolupráci so združením Learn2Code v apríli, počas pandémie a povinnej karantény, bezplatné online webináre STEM...

Študijný plán pre budúceho Java programátora

Vzdělávání

Rozhodol si sa, že sa staneš Java programátorom. Dobrá voľba. V nasledujúcich riadkoch si prečítaj, kde začať, čo budeš potrebovať a ako dosiahnuť svoju...