"Oh, Rishi! Hallo!"

"Hallo, Amigo! Hoe is het leven?"

'Geweldig. Bilaabo heeft me zojuist een heleboel interessante dingen verteld over File en hoe ermee te werken.'

"Toevallig denk ik dat ik iets toe te voegen heb over dit onderwerp."

"Echt waar? Dan ben ik een en al oor."

"Oké, luister. Java is voortdurend in ontwikkeling. De ontwikkelaars zijn voortdurend op zoek naar nieuwe manieren om verschillende dingen efficiënter te doen. In Java 7 hebben ze een alternatief toegevoegd aan de File-klasse."

Bestanden, Pad - 1

"Alternatief?"

"Ja. Ze hebben de klasse File als basis genomen, wat nieuwe dingen toegevoegd, de methoden hernoemd en vervolgens in tweeën gesplitst. Dus nu zijn er twee nieuwe klassen: Path en FilesPath is eigenlijk de nieuwe analoog van de File klasse, en File is een hulpprogrammaklasse (analoog aan de klassen Arrays en Collections). Alle statische methoden van de klasse File gaan daar naartoe. Op deze manier doen is 'correcter' in termen van OOP."

"Nou, als het in termen van OOP is, oké. Dus wat is er veranderd?"

"Eerst besloten ze de methoden die  String-  en File- objecten retourneerden niet te reproduceren. In de klasse Path  retourneren alle methoden een Path .

"Ten tweede hebben ze veel statische hulpprogramma's naar de klasse Files verplaatst ."

"Ten derde werd het handiger om met relatieve paden te werken."

"Hier is een lijst met de methoden:"

Methoden van de klasse Path Beschrijving
boolean isAbsolute() Retourneert waar als het pad absoluut is.
Path getRoot() Retourneert de hoofdmap van het huidige pad, dwz de bovenste map.
Path getFileName() Retourneert de bestandsnaam van het huidige pad.
Path getParent() Retourneert de map van het huidige pad.
boolean startsWith(Path other) Controleert of het huidige pad begint met het gepasseerde pad.
boolean endsWith(Path other) Controleert of het huidige pad eindigt met het gepasseerde pad.
Path normalize() Normaliseert het huidige pad. Converteert bijvoorbeeld «c:/dir/dir2/../a.txt» naar «c:/dir/a.txt»
Path relativize(Path other) Berekent het relatieve pad van twee paden, dwz «het verschil tussen de paden»
Path resolve(String other) Lost een absoluut pad op met behulp van de huidige en relatieve paden.
URI toUri() Retourneert de URI van het huidige pad/bestand.
Path toAbsolutePath() Converteert het pad naar een absoluut pad als het relatief is.
File toFile() Retourneert een File-object dat overeenkomt met het huidige Path-object.

"En het huidige pad - wat is dat?"

"Dit is het pad dat is doorgegeven aan de constructeur van het Path-object waarvan de methoden worden aangeroepen."

"OK. Dus welke methoden heeft de klasse Files ?"

"Heb je haast om ergens te komen? Ik zal het je nu vertellen. Dit zijn de belangrijkste methoden:"

Methoden van de klasse Files Beschrijving
Path createFile(…) Maakt een bestand op schijf.
Path createDirectory(…) Maakt een map aan.
Path createDirectories(…) Creëert een map en al zijn submappen.
Path createTempFile(…) Maakt een tijdelijk bestand aan.
Path createTempDirectory(…) Maakt een tijdelijke map aan.
void delete(Path path) Verwijdert een bestand.
Path copy(Path source, Path target,…) Kopieert een bestand.
Path move(Path source, Path target,…) Verplaatst een bestand.
boolean isSameFile(Path, Path) Vergelijkt twee bestanden.
boolean isDirectory(Path) Is het pad een directory?
boolean isRegularFile(Path) Is het pad een bestand?
long size(Path) Retourneert de bestandsgrootte.
boolean exists(Path) Bestaat er een object met dezelfde naam?
boolean notExists(Path) Bestaat er geen object met dezelfde naam?
long copy(InputStream, OutputStream) Kopieert bytes van de InputStream naar de OutputStream.
long copy(Path, OutputStream) Kopieert alle bytes van het pad naar de OutputStream.
long copy(InputStream, Path) Kopieert alle bytes van de InputStream naar het pad.
byte[] read(InputStream, int initialSize) Leest een reeks bytes uit de InputStream.
byte[] readAllBytes(Path path) Leest alle bytes van de InputStream.
List<String> readAllLines(Path path,..) Leest het tekstbestand en retourneert een lijst met tekenreeksen.
Path write(Path path, byte[] bytes,…) Schrijft een reeks bytes naar een bestand.

"Wat interessant! Zoveel coole functies, en allemaal op dezelfde plek."

"Nou kijk. Stel dat je een bestand van internet wilt downloaden en het vervolgens naar iemand wilt sturen. Om dit te doen, is het erg handig om een ​​tijdelijk bestand op schijf te maken en de gelezen gegevens erop op te slaan."

"Is het moeilijk om een ​​bestand van internet te downloaden?"

"Het is heel simpel. Kijk naar dit voorbeeld:"

Code
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"En dat is het?"

"Ja, wat had je verwacht te zien? Er zijn maar 4 lijnen."

" Regel 1.  Creëert een URL-object, waaraan de URL van het afbeeldingsbestand wordt doorgegeven.

" Regel 2.  Een stream voor het lezen van een bestand (InputStream) wordt geopend op het url-object.

" Regel 3.  De createTempFilemethode wordt gebruikt om een ​​tijdelijk bestand te maken.

" Regel 4.  De methode Files.copy kopieert gegevens van  inputStream naar tempFile. Dat is alles."

"Ingenieus!"

'Geweldig. Ik ben blij dat je het leuk vindt. Ik denk dat je de rest van de methoden zelf wel kunt bedenken. En ik zal Diego vragen om je er verschillende opdrachten over te geven.'

"Trouwens, hier is een goede link over dit materiaal"