Java Files – java.nio.file.Files Klasse

De Java Files-klasse werd geïntroduceerd in Java 1.7 en maakt deel uit van het java.nio.file-pakket.

Java Files Klasse

  • De Java Files-klasse bevat statische methoden die werken op bestanden en mappen.
  • Deze klasse wordt gebruikt voor basisbestandsbewerkingen zoals het maken, lezen, schrijven, kopiëren en verwijderen van bestanden of mappen van het bestandssysteem.

Voordat we verder gaan, laten we eerst eens kijken naar de onderstaande termen:

  1. Pad: Dit is de interface die de klasse java.io.File vervangt als de representatie van een bestand of een map wanneer we werken in Java NIO.
  2. Paden: Deze klasse bevat een statische methode om een Pad-instantie te maken.

java.nio.file.Path interface is net zoals de oude klasse java.io.File. Path vertegenwoordigt de locatie van het bestand en wanneer we een Pad naar een nieuw bestand maken, wordt het daadwerkelijke bestand pas gemaakt wanneer we het maken met Files.createFile(Path filePath). Zoals we kunnen zien in het bovenstaande diagram, wordt de Paths-klasse gebruikt om een instantie van Path te maken en gebruikt de Files-klasse de Path-instantie om aan een bestand te werken. File– en Path-objecten weten hoe ze naar elkaar moeten worden geconverteerd, zo kunnen we oudere code gebruiken om te interageren met nieuwe Files-hulpprogramma’s.

Java IO vs NIO

Hoe Path maken

We kunnen een object van Path maken door de Paths.get(String first, String... more)-methode van de Paths-klasse aan te roepen.

Path path1 = Paths.get("/tmp/file.txt"); // For UNIX

Path path2 = Paths.get("D:/data/file.txt"); // For Windows

We kunnen ook een object van Path maken door de onderdelen van het pad afzonderlijk op te geven in de Paths.get()-methode.

Path path1 = Paths.get("/tmp", "file.txt");

Path path2 = Paths.get("D:", "data", "file.txt");

Path path3 = Paths.get("D:/data", "file.txt") ;

Zoals we kunnen zien, kunnen we de mapnaam en bestandsnaam apart doorgeven in de Paths.get()-methode.

Java Bestanden Methoden

De Java NIO Files-klasse bevat statische methoden die worden gebruikt voor het manipuleren van bestanden en mappen, en deze methoden werken voornamelijk met het Path-object. Laten we eens kijken naar de onderstaande methoden van de Files-klasse:

  1. copy(InputStream in, Path target, CopyOption… opties): Deze methode kopieert alle bytes van de gespecificeerde invoerstroom naar het opgegeven doelbestand en geeft het aantal gelezen of geschreven bytes terug als een lang waarde.
  2. copy(Path source, OutputStream out): Deze methode kopieert alle bytes van het opgegeven bronbestand naar de opgegeven uitvoerstroom en geeft het aantal gelezen of geschreven bytes terug als een lang waarde.
  3. copy(Path source, Path target, CopyOption… opties): Deze methode kopieert het opgegeven bronbestand naar het gespecificeerde doelbestand en geeft het pad van het doelbestand terug.
  4. createDirectories(Path dir, FileAttribute<?>… attrs): Deze methode maakt directories aan met het opgegeven pad door eerst alle nog niet-bestaande bovenliggende mappen te maken. Deze methode geeft het pad van de aangemaakte directory terug en gooit geen uitzondering als de directory niet kon worden gemaakt omdat deze al bestaat. FileAttribute is een optionele parameter om automatisch in te stellen bij het maken van de nog niet-bestaande mappen, en het geeft het pad van de aangemaakte directory terug.
  5. createDirectory(Path dir, FileAttribute<?>… attrs): Deze methode maakt een map aan met het opgegeven pad. Als het maken van de map succesvol is, wordt het pad van de aangemaakte map geretourneerd. Als de map al bestaat, wordt er een nio.file.FileAlreadyExistsException gegenereerd.
  6. createFile(Path path, FileAttribute<?>… attrs): Deze methode maakt een nieuw leeg bestand aan met het opgegeven pad en retourneert het pad van het nieuw aangemaakte bestand als het succesvol is gemaakt. Als het bestand al bestaat, wordt er een nio.file.FileAlreadyExistsException gegenereerd.
  7. createTempDirectory(Path dir, String prefix, FileAttribute<?>… attrs): Deze methode maakt een tijdelijke map aan met het opgegeven pad en genereert de naam van de map met behulp van het opgegeven voorvoegsel. Het retourneert het pad van de nieuw aangemaakte tijdelijke map.
  8. createTempDirectory(String prefix, FileAttribute<?>… attrs): Deze methode maakt een tijdelijke map aan in de standaard tijdelijke bestandsmap en genereert de naam van de map met behulp van het opgegeven voorvoegsel. Het retourneert het pad van de nieuw aangemaakte tijdelijke map die is geassocieerd met het standaard bestandssysteem.
  9. createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>… attrs): Deze methode maakt een tijdelijk bestand aan in de opgegeven map en genereert de bestandsnaam met behulp van het opgegeven voorvoegsel en achtervoegsel en retourneert het pad van het nieuw aangemaakte bestand.
  10. createTempFile(String prefix, String suffix, FileAttribute<?>… attrs): Deze methode maakt een tijdelijk bestand aan in de standaard tijdelijke-map en genereert de bestandsnaam met behulp van de opgegeven voorvoegsel en achtervoegsel en retourneert het pad van het nieuw aangemaakte bestand.
  11. delete(Path path): Dit is een lege methode en verwijdert eenvoudig het bestand van het opgegeven pad. Deze methode gooit NoSuchFileException als het bestand niet bestaat op het opgegeven pad en als het bestand een map is en mogelijk niet leeg is en niet kan worden verwijderd, zal het in dit geval een foutmelding geven
  12. deleteIfExists(Path path): Deze methode controleert of het bestand bestaat voordat het het bestand verwijdert en retourneert de boolean waarde true als het bestand op het opgegeven pad met succes is verwijderd en retourneert false als het bestand niet bestaat op het opgegeven pad. Als het bestand een map is en mogelijk niet leeg is en niet kan worden verwijderd, zal het in dit geval een foutmelding geven
  13. exists(Path path): Deze methode controleert of het bestand bestaat op het opgegeven pad en als het bestand bestaat, retourneert het true, anders retourneert het false.
  14. getLastModifiedTime(Path path, Linkoption… options): Deze methode retourneert de laatst gewijzigde tijd van een bestand vanaf het opgegeven pad als
  15. getOwner(Path path, Linkoption… options): Deze methode retourneert UserPrincipal die de eigenaar van het bestand op het opgegeven pad vertegenwoordigt.
  16. isDirectory(Path path, LinkOption… opties): Deze methode controleert of het bestand een map is vanaf het opgegeven pad. Het retourneert waar als het bestand een map is en onwaar als het bestand niet bestaat, geen map is of niet kan worden bepaald of het bestand een map is of niet.
  17. isExecutable(Path pad): Deze methode controleert of het bestand op het opgegeven pad uitvoerbaar is of niet, en controleert ook of het bestand bestaat en of deze JVM voldoende rechten heeft om het bestand uit te voeren. Het retourneert waar als het bestand bestaat op het opgegeven pad en uitvoerbaar is, en onwaar als het bestand niet bestaat of de JVM niet voldoende rechten heeft om het bestand uit te voeren of als de toegang niet kan worden bepaald.
  18. isHidden(Path pad): Deze methode geeft aan of het bestand op het opgegeven pad als verborgen wordt beschouwd of niet. De exacte definitie van verborgen is afhankelijk van het platform of de provider. In geval van een UNIX-systeem wordt een bestand als verborgen beschouwd als de bestandsnaam begint met een puntkarakter (‘.’). In geval van WINDOWS wordt een bestand als verborgen beschouwd als het geen map is en de DOS-verborgen attribuut is ingesteld. Het retourneert waar als het bestand op het opgegeven pad als verborgen wordt beschouwd, anders onwaar.
  19. isReadable(Path pad): Deze methode test of het bestand op het opgegeven pad leesbaar is of niet. Het retourneert waar als het bestand op het opgegeven pad bestaat en leesbaar is, en onwaar als het bestand niet bestaat of leestoegang is geweigerd omdat de JVM niet voldoende rechten heeft of de toegang niet kan worden bepaald.
  20. isWritable(Path path): Deze methode test of het bestand op het opgegeven pad beschrijfbaar is of niet. Het retourneert true als het bestand op het gespecificeerde pad bestaat en beschrijfbaar is, en false als het bestand niet bestaat of schrijftoegang wordt geweigerd omdat de JVM niet voldoende privileges heeft of de toegang niet kan worden bepaald.
  21. move(Path source, Path target, CopyOption… options): Deze methode verplaatst of hernoemt een bronbestand naar het doelbestand en retourneert het pad van het doelbestand. Optionele parameters kunnen het volgende bevatten: REPLACE_EXISTING: Dit betekent dat als het doelbestand bestaat, het wordt vervangen als het geen lege directory is. ATOMIC_MOVE: Dit betekent dat de verplaatsing wordt uitgevoerd als een atomaire bestandssysteemoperatie en alle andere opties worden genegeerd. Deze methode werpt een FileAleadyExistsException op als het doelbestand bestaat maar niet kan worden vervangen omdat de optie REPLACE_EXISTING niet is gespecificeerd. Deze methode werpt een DirectoryNotEmptyException op als de optie REPLACE_EXISTING is gespecificeerd maar het bestand niet kan worden vervangen omdat het een niet-lege directory is.
  22. newBufferedReader(Path path, Charset cs): Deze methode opent een bestand met het opgegeven pad om te lezen door een BufferedReader te retourneren die wordt gebruikt om tekst uit het bestand te lezen. Bytes uit het bestand worden gedecodeerd naar tekens met behulp van de gespecificeerde tekenset.
  23. newBufferedWriter(Path path, Charset cs, OpenOption… options): Deze methode opent of creëert een bestand op het opgegeven pad voor schrijven door een BufferedWriter terug te geven die wordt gebruikt om tekst naar het bestand te schrijven. Het options-parameter geeft aan hoe het bestand wordt gemaakt of geopend. Als er geen optie is opgegeven, overweegt het standaard CREATE, TRUNCATE_EXISTING en WRITE opties. Dit betekent dat het bestand wordt geopend voor schrijven en wordt gemaakt als het bestand niet bestaat, of het bestaande bestand wordt ingekort tot een grootte van 0 als het bestaat. Deze methode genereert een UnsupportedOperationException als een niet-ondersteunde optie is opgegeven.
  24. newByteChannel(Path path, OpenOption… options): Deze methode creëert of opent het bestand op het opgegeven pad door een seekable bytekanaal terug te geven om toegang te krijgen tot het bestand. Deze methode genereert een UnsupportedOperationException als een niet-ondersteunde optie is opgegeven.
  25. newDirectoryStream(Path path): Deze methode opent een map door een DirectoryStream terug te geven om over alle vermeldingen in de map vanaf het opgegeven pad te itereren. De elementen die worden geretourneerd door de iterator van DirectoryStream zijn van het type Path en vertegenwoordigen elk een vermelding in de map. Deze methode genereert een NotDirectoryException als het bestand op het opgegeven pad niet kon worden geopend omdat het geen map is.
  26. newDirectoryStream(Path path, Filter filter): Deze methode opent een map door een DirectoryStream terug te geven om alle vermeldingen in de map van het opgegeven pad te doorlopen. De elementen geretourneerd door de iterator van DirectoryStream zijn van het type Path en elk ervan vertegenwoordigt een vermelding in de map, en deze vermeldingen worden gefilterd door de opgegeven filter. Deze methode gooit NotDirectoryException als het bestand op het opgegeven pad niet kon worden geopend omdat het geen map is.
  27. newDirectoryStream(Path path, String glob): Deze methode opent een map door een DirectoryStream terug te geven om alle vermeldingen in de map van het opgegeven pad te doorlopen. De elementen geretourneerd door de iterator van DirectoryStream zijn van het type Path en elk ervan vertegenwoordigt een vermelding in de map, en deze vermeldingen worden gefilterd door de String-weergave van hun bestandsnamen te matchen met het opgegeven glob-patroon. Deze methode gooit NotDirectoryException als het bestand op het opgegeven pad niet kon worden geopend omdat het geen map is, en PatternSyntaxException als het patroon ongeldig is.
  28. newInputStream(Path path, Openoption… opties): Deze methode opent een bestand door een invoerstroom terug te geven om het bestand van het opgegeven pad te lezen. De parameter opties bepaalt hoe het bestand wordt geopend en als er geen opties zijn opgegeven, wordt het bestand geopend met READ. Deze methode gooit IllegalArgumentException als een ongeldige combinatie van opties is opgegeven en UnsupportedOperationException als een niet-ondersteunde optie is opgegeven.
  29. newOutputStream(Path path, Openoption… options): Deze methode opent een bestand door een outputstream terug te geven om bytes naar het bestand op het gespecificeerde pad te schrijven. De parameter ‘options’ bepaalt hoe het bestand wordt geopend. Als er geen optie is opgegeven, wordt standaard CREATE, TRUNCATE_EXISTING en WRITE overwogen. Dit betekent dat het bestand wordt geopend voor schrijven en wordt gemaakt als het bestand niet bestaat of het bestaande bestand wordt ingekort tot een grootte van 0 als het wel bestaat. Deze methode genereert een IllegalArgumentException als er een ongeldige combinatie van opties is opgegeven en een UnsupportedOperationException als een niet-ondersteunde optie is opgegeven.
  30. notExists(Path path, LinkOption options): Deze methode test of het bestand op het opgegeven pad niet bestaat. De parameter ‘options’ geeft aan hoe symbolische koppelingen worden behandeld als het bestand een symbolische koppeling is. Standaard worden symbolische koppelingen gevolgd. Als de optie NOFOLLOW_LINK aanwezig is, worden symbolische koppelingen niet gevolgd. Deze methode geeft ’true’ terug als het bestand niet bestaat op het opgegeven pad en ‘false’ als het bestand bestaat of als de aanwezigheid ervan niet kan worden bepaald.
  31. readAllBytes(Path path): Deze methode leest alle bytes uit het bestand op het opgegeven pad en geeft de byte-array terug met de gelezen bytes uit het bestand.
  32. readAllLines(Path path, Charset cs): Deze methode leest alle regels uit het bestand op het opgegeven pad en geeft de List terug met de regels uit het bestand.
  33. grootte(Path pad): Deze methode retourneert de grootte van het bestand op het opgegeven pad in bytes.
  34. walkFileTree(Path start, FileVisitor<? Super Path> bezoeker): Deze methode wordt gebruikt om door de map te navigeren. Het doorloopt de map op het opgegeven pad recursief en retourneert het startbestand.
  35. schrijf(Path pad, byte[] bytes, OpenOption… opties): Deze methode schrijft bytes naar een bestand op het opgegeven pad. De opties parameter geeft aan hoe het bestand wordt gemaakt of geopend. Als er geen optie is opgegeven, worden standaard CREATE, TRUNCATE_EXISTING en WRITE opties overwogen, dit betekent dat het bestand wordt geopend voor schrijven en wordt gemaakt als het bestand niet bestaat of een bestaand bestand wordt afgekapt tot een grootte van 0 als het bestaat. Alle bytes in de byte-array worden naar het bestand geschreven. Deze methode zorgt ervoor dat het bestand wordt gesloten wanneer alle bytes zijn geschreven en retourneert het pad van het geschreven bestand.

Maak een bestand aan met de Files-klasse

De Files-klasse biedt de methode createFile(Path bestandsPad, FileAttribute<?>… attributen) om een bestand te maken met de opgegeven Path. Laten we eens kijken naar het onderstaande voorbeeldprogramma.

package com.journaldev.examples;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * Java Create file using Files class
 * 
 * @author pankaj
 *
 */
public class FilesCreateFileExample {

	public static void main(String[] args) {
		
		// initialiseer het Path-object
		Path path = Paths.get("D:/data/file.txt");
		// maak het bestand aan
		try {
			Path createdFilePath = Files.createFile(path);
			System.out.println("File Created at Path : "+createdFilePath);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

De uitvoer van het bovenstaande programma is als volgt:

File Created at Path : D:\data\file.txt

Maak Mappen Gebruikmakend van de Files Class

De Files class biedt de methoden createDirectory(Path dir, FileAttribute<?>… attrs) en createDirectories(Path dir, FileAttribute<?>… attrs) om enkele en meerlaagse mappen te maken met de opgegeven Path. Laten we eens kijken naar het onderstaande voorbeeldprogramma.

package com.journaldev.examples;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * Java Create directories using Files class
 * 
 * @author pankaj
 *
 */
public class FilesCreateDirectoriesExample {

	public static void main(String[] args) {
		// initialiseer Path-objecten
		Path path1 = Paths.get("D:/pankaj");
		Path path2 = Paths.get("D:/pankaj/java7");
		Path path3 = Paths.get("D:/pankaj/java7/Files");
		
		try {
			Path createdDir1 = Files.createDirectory(path1);//first level directory
			Path createdDir2 = Files.createDirectory(path2);//second level directory
			Path createdDir3 = Files.createDirectory(path3);//all level directories
			System.out.println("First Level Directory Created at Path : "+createdDir1);
			System.out.println("Second Level Directory Created at Path : "+createdDir2);
			System.out.println("All Level Directories Created at Path : "+createdDir3);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

De output van het bovenstaande programma is als volgt:

First Level Directory Created at Path : D:\pankaj
Second Level Directory Created at Path : D:\pankaj\java7
All Level Directories Created at Path : D:\pankaj\java7\Files

Converteer Bestand naar Pad en Vice Versa

Bestand- en Path-objecten kunnen naar elkaar worden geconverteerd met behulp van de volgende methoden:

File file = new File(“D:/data/file.txt”);

Path path = file.toPath();

File file1 = path.toFile();

Lees Bestandsgegevens met behulp van de Files Class

De Files class biedt de volgende methoden voor het lezen van bestanden.

  1. readAllBytes(Path path): Deze methode leest alle bytes uit het bestand op het opgegeven pad en retourneert de byte-array met de gelezen bytes van het bestand.
  2. readAllLines(Path path,Charsetcs): Deze methode leest alle regels uit het bestand op het opgegeven pad en retourneert de List die de regels uit het bestand bevat.

Laten we eens kijken naar het onderstaande voorbeeldprogramma.

package com.journaldev.examples;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

/**
 * Java Files read file example
 * 
 * @author pankaj
 *
 */
public class FilesReadFileExample {

	public static void main(String[] args) {
		
		Path path = Paths.get("D:/data/file.txt");
		try {
			byte[] bs = Files.readAllBytes(path);
			List<String> strings = Files.readAllLines(path);
			
			System.out.println("Read bytes: \n"+new String(bs));
			System.out.println("Read lines: \n"+strings);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

De uitvoer van het bovenstaande programma is als volgt:

Read bytes: 
Hello world
This is Read file example
Thank you
Read lines: 
[Hello world, This is Read file example, Thank you]

Kopieer bestand met behulp van de Files-klasse

De Files-klasse biedt de methode copy(Path source, Path target, CopyOption… options) die het opgegeven bronbestand naar het gespecificeerde doelbestand kopieert en het pad van het doelbestand retourneert. Laten we eens kijken naar het onderstaande voorbeeldprogramma:

package com.journaldev.examples;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

/**
 * Java Files copy file example
 * 
 * @author pankaj
 *
 */
public class FilesCopyFileExample {

	public static void main(String[] args) {
		Path sourcePath = Paths.get("D:/data/sourceFile.txt");
		Path targetPath = Paths.get("D:/data/targetFile.txt");
		
		try {
			Path path = Files.copy(sourcePath, targetPath,StandardCopyOption.REPLACE_EXISTING);//copy with REPLACE_EXISTING option
			System.out.println("Target file Path : "+path);
			System.out.println("Copied Content : \n"+new String(Files.readAllBytes(path)));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

De uitvoer van het bovenstaande programma is als volgt:

Target file Path : D:\data\targetFile.txt
Copied Content : 
Hello world
This is Copy file example
Thank you

Verplaats bestand met behulp van de Files-klasse

De Java Files-klasse biedt de methode move(Path source, Path target, CopyOption… options), die een bronbestand naar een doelbestand verplaatst of hernoemt en het pad van het doelbestand retourneert. De optionele parameter kan het volgende bevatten: REPLACE_EXISTING: Dit betekent dat als het doelbestand bestaat, het wordt vervangen als het geen lege map is. ATOMIC_MOVE: Dit betekent dat de verplaatsing wordt uitgevoerd als een atomaire bestandssysteemoperatie en alle andere opties worden genegeerd. Deze methode gooit een FileAleadyExistsException als het doelbestand bestaat maar niet kan worden vervangen omdat de REPLACE_EXISTING-optie niet is gespecificeerd. Deze methode gooit een DirectoryNotEmptyException als de REPLACE_EXISTING-optie is gespecificeerd maar het bestand niet kan worden vervangen omdat het een niet-lege map is. Laten we eens kijken naar het onderstaande voorbeeldprogramma:

package com.journaldev.examples;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

/**
 * Java Files move file example
 * 
 * @author pankaj
 *
 */
public class FilesMoveFileExample {

	public static void main(String[] args) {
		Path sourcePath = Paths.get("D:/data/sourceFile.txt");
		Path targetPath = Paths.get("D:/data/targetFile.txt");
		try {
			Path path = Files.move(sourcePath, targetPath,StandardCopyOption.REPLACE_EXISTING);//move with REPLACE_EXISTING option
			System.out.println("Target file Path : "+path);
			System.out.println("Moved Content : \n"+new String(Files.readAllBytes(path)));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Bestand schrijven met behulp van de Files-klasse

De Java NIO Files-klasse biedt de methode write(Path path, byte[] bytes, OpenOption... options) die bytes naar een bestand op de opgegeven pad schrijft. De opties parameter geeft aan hoe het bestand wordt aangemaakt of geopend. Als er geen optie is opgegeven, worden standaard CREATE, TRUNCATE_EXISTING en WRITE-opties overwogen. Dit betekent dat het bestand wordt geopend voor schrijven en wordt aangemaakt als het bestand niet bestaat, of wordt afgekapt tot een grootte van 0 als het bestand wel bestaat. Alle bytes in de byte-array worden naar het bestand geschreven. Deze methode zorgt ervoor dat het bestand wordt gesloten wanneer alle bytes zijn geschreven en geeft het pad van het geschreven bestand terug.

package com.journaldev.examples;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * Java Files write file example
 * 
 * @author pankaj
 *
 */
public class FilesWriteFileExample {

	public static void main(String[] args) {
		Path path = Paths.get("D:/data/test.txt");
		try {
			String str = "This is write file Example";
			byte[] bs = str.getBytes();
			Path writtenFilePath = Files.write(path, bs);
			System.out.println("Written content in file:\n"+ new String(Files.readAllBytes(writtenFilePath)));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

Walk File Tree

De Files-klasse biedt de methode walkFileTree(Path start, FileVisitor visitor) die wordt gebruikt om het bestandssysteem te doorlopen. Het doorloopt de directory op het opgegeven pad recursief en geeft het startbestand terug.

package com.journaldev.examples;

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;

/**
 * Java Files walk file tree example
 * 
 * @author pankaj
 *
 */
public class FilesWalkFileTreeExample {

	public static void main(String[] args) {
		Path path = Paths.get("D:/pankaj");
		try {
			Files.walkFileTree(path, new FileVisitor<Path>() {

				@Override
				public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
					System.out.println("Post Visit Directory: "+dir);
					return FileVisitResult.CONTINUE;
				}

				@Override
				public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
					System.out.println("Pre Visit Directory: "+dir);
					return FileVisitResult.CONTINUE;
				}

				@Override
				public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
					System.out.println("Visit File: "+file);
					return FileVisitResult.CONTINUE;
				}

				@Override
				public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
					System.out.println("Visit Failed File: "+file);
					return FileVisitResult.CONTINUE;
				}
			});
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

De uitvoer van het bovenstaande programma is hieronder:

Pre Visit Directory: D:\pankaj
Pre Visit Directory: D:\pankaj\java6
Pre Visit Directory: D:\pankaj\java6\Files
Visit File: D:\pankaj\java6\Files\file.txt.txt
Post Visit Directory: D:\pankaj\java6\Files
Post Visit Directory: D:\pankaj\java6
Pre Visit Directory: D:\pankaj\java7
Pre Visit Directory: D:\pankaj\java7\Files
Visit File: D:\pankaj\java7\Files\file.txt.txt
Post Visit Directory: D:\pankaj\java7\Files
Post Visit Directory: D:\pankaj\java7
Pre Visit Directory: D:\pankaj\java8
Pre Visit Directory: D:\pankaj\java8\Files
Visit File: D:\pankaj\java8\Files\file.txt.txt
Post Visit Directory: D:\pankaj\java8\Files
Post Visit Directory: D:\pankaj\java8
Post Visit Directory: D:\pankaj

Merk op dat alle bestanden en mappen recursief worden verwerkt. Dit is zeer nuttig wanneer je algemene bewerkingen op alle bestanden wilt uitvoeren, zoals het hernoemen van alle bestanden in een map recursief. Dat is alles voor de Java Files-klasse. Referentie: API Doc

Source:
https://www.digitalocean.com/community/tutorials/java-files-nio-files-class