File Java – Classe java.nio.file.Files

Il classe Java Files è stato introdotto in Java 1.7 ed è parte del pacchetto java.nio.file.

Classe Java Files

  • La classe Java Files contiene metodi statici che operano su file e directory.
  • Questa classe è utilizzata per operazioni di base sui file come creare, leggere, scrivere, copiare ed eliminare file o directory nel sistema di file.

Prima di procedere diamo un’occhiata ai seguenti termini:

  1. Path: Questa è l’interfaccia che sostituisce la classe java.io.File come rappresentazione di un file o di una directory quando lavoriamo in Java NIO.
  2. Paths: Questa classe contiene un metodo statico per creare un’istanza di Path.

java.nio.file.Path è proprio come la vecchia classe interfaccia java.io.File. Path rappresenta la posizione del file e quando creiamo un percorso per un nuovo file, non crea effettivamente il file fino a quando non lo creiamo usando Files.createFile(Path filePath). Come possiamo vedere nel diagramma sopra, la classe Paths viene utilizzata per creare un’istanza di Path e la classe Files utilizza l’istanza di Path per lavorare su un file. Gli oggetti File e Path sanno come convertirsi l’uno nell’altro, è così che possiamo utilizzare il codice più vecchio per interagire con la nuova utilità Files.

Java IO vs NIO

Come Creare un Percorso

Possiamo creare un oggetto Path chiamando il metodo Paths.get(String first, String... more) della classe Paths.

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

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

Possiamo anche creare un oggetto Path separando le parti del percorso nel metodo Paths.get().

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

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

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

Come possiamo vedere, possiamo passare il nome della cartella e del file nel metodo Paths.get() separatamente.

Metodi dei file Java

La classe Java NIO Files contiene metodi statici utilizzati per manipolare file e directory e questi metodi funzionano principalmente sull’oggetto Path. Diamo un’occhiata ai seguenti metodi della classe Files:

  1. copia(InputStream in, Percorso target, OpzioneCopia… opzioni): Questo metodo copia tutti i byte dallo stream di input specificato al file di destinazione specificato e restituisce il numero di byte letti o scritti come valore long.
  2. copia(Percorso origine, OutputStream out): Questo metodo copia tutti i byte dal file di origine specificato allo stream di output dato e restituisce il numero di byte letti o scritti come valore long.
  3. copia(Percorso origine, Percorso target, OpzioneCopia… opzioni): Questo metodo copia il file di origine specificato nel file di destinazione specificato e restituisce il percorso del file di destinazione.
  4. creaDirectory(Percorso dir, AttributoFile<?>… attrs): Questo metodo crea una directory utilizzando il percorso dato creando prima tutte le directory genitore non esistenti. Questo metodo non genera un’eccezione se la directory non può essere creata perché esiste già. AttributoFile è un parametro opzionale per impostare automaticamente quando si creano le directory non esistenti e restituisce il percorso della directory creata.
  5. createDirectory(Path dir, FileAttribute<?>… attrs): Questo metodo crea una directory utilizzando il percorso fornito. Se la creazione della directory avviene con successo, restituirà il percorso della directory creata. Se la directory esiste già, verrà lanciata un’eccezione nio.file.FileAlreadyExistsException.
  6. createFile(Path path, FileAttribute<?>… attrs): Questo metodo crea un nuovo file vuoto utilizzando il percorso fornito e restituisce il percorso del file appena creato se la creazione avviene con successo. Se il file esiste già, verrà lanciata un’eccezione nio.file.FileAlreadyExistsException.
  7. createTempDirectory(Path dir, String prefix, FileAttribute<?>… attrs): Questo metodo crea una directory temporanea utilizzando il percorso fornito e genererà il nome della directory utilizzando il prefisso fornito. Restituirà il percorso della directory temporanea appena creata.
  8. createTempDirectory(String prefix, FileAttribute<?>… attrs): Questo metodo crea una directory temporanea nella directory dei file temporanei predefinita e genera il nome della directory utilizzando il prefisso fornito. Restituirà il percorso della directory temporanea appena creata, associata al sistema di file predefinito.
  9. createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>… attrs): Questo metodo crea un file temporaneo nella directory specificata e genera il nome del file utilizzando il prefisso e il suffisso forniti, quindi restituisce il percorso del file appena creato.
  10. createTempFile(String prefix, String suffix, FileAttribute<?>… attrs): Questo metodo crea un file temporaneo nella directory predefinita dei file temporanei e genera il nome del file utilizzando il prefisso e il suffisso dati e restituisce il percorso del file appena creato.
  11. delete(Path path): Questo è un metodo void e semplicemente elimina il file dal percorso specificato. Questo metodo genera un’eccezione NoSuchFileException se il file non esiste nel percorso specificato e se il file è una directory e potrebbe non essere vuoto e non può essere eliminato, in questo caso genera
  12. deleteIfExists(Path path): Questi metodi controllano se il file esiste prima di eliminarlo e restituiscono il valore booleano true se il file nel percorso specificato viene eliminato correttamente e restituiscono false se il file non esiste nel percorso specificato. Se il file è una directory e potrebbe non essere vuoto e non può essere eliminato, in questo caso genera
  13. exists(Path path): Questo metodo controlla se il file esiste nel percorso specificato e se il file esiste restituirà true, altrimenti restituirà false.
  14. getLastModifiedTime(Path path, Linkoption… options): Questo metodo restituisce l’ultima ora di modifica di un file dal percorso dato come
  15. getOwner(Path path, Linkoption… options): Questo metodo restituisce UserPrincipal che rappresenta il proprietario del file nel percorso dato.
  16. isDirectory(Path path, LinkOption… opzioni): Questo metodo verifica se il file è una directory dal percorso specificato. Restituisce true se il file è una directory e false se il file non esiste o non è una directory o se non è possibile determinare se il file è una directory o meno.
  17. isExecutable(Path path): Questo metodo verifica se il file nel percorso specificato è eseguibile o meno e controlla anche se il file esiste e se questa JVM ha i privilegi appropriati per eseguire il file. Restituisce true se il file esiste nel percorso specificato ed è eseguibile e false se il file non esiste o se la JVM non ha privilegi sufficienti per eseguire il file o se l’accesso non può essere determinato.
  18. isHidden(Path path): Questo metodo indica se il file nel percorso specificato è considerato nascosto o meno. La definizione esatta di nascosto dipende dalla piattaforma o dal provider. Nel caso di un sistema UNIX, un file è considerato nascosto se il nome del file inizia con il carattere punto (‘.’). Nel caso di WINDOWS, un file è considerato nascosto se non è una directory e l’attributo nascosto di DOS è impostato. Restituisce true se il file nel percorso specificato è considerato nascosto, altrimenti false.
  19. isReadable(Path path): Questo metodo verifica se il file nel percorso specificato è leggibile o meno. Restituisce true se il file nel percorso specificato esiste ed è leggibile e false se il file non esiste o se l’accesso in lettura è negato perché la JVM non dispone di privilegi sufficienti o l’accesso non può essere determinato.
  20. isWritable(Path path): Questo metodo verifica se il file nel percorso specificato è scrivibile o meno. Restituisce true se il file nel percorso specificato esiste ed è scrivibile e false se il file non esiste o l’accesso in scrittura è negato perché la JVM non dispone dei privilegi sufficienti o l’accesso non può essere determinato.
  21. move(Path source, Path target, CopyOption… options): Questo metodo sposta o rinomina un file di origine nel file di destinazione e restituisce il percorso del file di destinazione. Il parametro delle opzioni può includere quanto segue: REPLACE_EXISTING: Significa che se il file di destinazione esiste, lo sostituisce se non è una directory non vuota. ATOMIC_MOVE: Significa che lo spostamento viene eseguito come operazione atomico del sistema di file e tutte le altre opzioni vengono ignorate. Questo metodo genera un’eccezione FileAleadyExistsException se il file di destinazione esiste ma non può essere sostituito perché l’opzione REPLACE_EXISTING non è specificata. Questo metodo genera un’eccezione DirectoryNotEmptyException se l’opzione REPlACE_EXISTING è specificata ma il file non può essere sostituito perché è una directory non vuota.
  22. newBufferedReader(Path path, Charset cs): Questo metodo apre un file utilizzando il percorso specificato per la lettura restituendo un BufferedReader che viene utilizzato per leggere il testo dal file. I byte dal file vengono decodificati in caratteri utilizzando il charset specificato.
  23. newBufferedWriter(Path path, Charset cs, Openoption… options): Questo metodo apre o crea un file utilizzando il percorso specificato per la scrittura, restituendo un BufferedWriter utilizzato per scrivere testo nel file. Il parametro delle opzioni specifica come il file viene creato o aperto. Se nessuna opzione viene specificata, vengono considerate le opzioni CREATE, TRUNCATE_EXISTING e WRITE per impostazione predefinita. Ciò significa che apre il file per la scrittura e lo crea se non esiste o tronca un file esistente alla dimensione 0 se esiste. Questo metodo genera un’eccezione UnsupportedOperationException se viene specificata un’opzione non supportata.
  24. newByteChannel(Path path, OpenOption… options): Questo metodo crea o apre il file utilizzando il percorso specificato, restituendo un canale di byte cercabile per accedere al file. Questo metodo genera un’eccezione UnsupportedOperationException se viene specificata un’opzione non supportata.
  25. newDirectoryStream(Path path): Questo metodo apre una directory restituendo un DirectoryStream per iterare su tutte le voci nella directory dal percorso specificato. Gli elementi restituiti dall’iteratore di DirectoryStream sono di tipo Path e ognuno rappresenta una voce nella directory. Questo metodo genera un’eccezione NotDirectoryException se il file nel percorso specificato non può essere aperto perché non è una directory.
  26. newDirectoryStream(Path path, Filter<? super Path > filter): Questo metodo apre una directory restituendo un DirectoryStream per iterare su tutte le voci nella directory dal percorso specificato. Gli elementi restituiti dall’iteratore di DirectoryStream sono di tipo Path e ognuno rappresenta una voce nella directory e queste voci sono filtrate dal filtro specificato. Questo metodo genera un’eccezione NotDirectoryException se il file nel percorso specificato non può essere aperto perché non è una directory.
  27. newDirectoryStream(Path path, String glob): Questo metodo apre una directory restituendo un DirectoryStream per iterare su tutte le voci nella directory dal percorso specificato. Gli elementi restituiti dall’iteratore di DirectoryStream sono di tipo Path e ognuno rappresenta una voce nella directory e queste voci sono filtrate corrispondendo la rappresentazione Stringa dei loro nomi di file al modello glob specificato. Questo metodo genera un’eccezione NotDirectoryException se il file nel percorso specificato non può essere aperto perché non è una directory e PatternSyntaxException se il modello non è valido.
  28. newInputStream(Path path, Openoption… options): Questo metodo apre un file restituendo uno stream di input per leggere il file dal percorso specificato. Il parametro options determina come il file viene aperto e se non vengono specificate opzioni, il file viene aperto in modalità READ. Questo metodo genera un’eccezione IllegalArgumentException se viene specificata una combinazione non valida di opzioni e UnsupportedOperationException se viene specificata un’opzione non supportata.
  29. newOutputStream(Path path, Openoption… opzioni): Questo metodo apre un file restituendo uno stream di output per scrivere byte nel file al percorso specificato. Il parametro opzioni determina come il file viene aperto e se nessuna opzione viene specificata, vengono considerate le opzioni CREATE, TRUNCATE_EXISTING e WRITE per impostazione predefinita. Ciò significa che apre il file per la scrittura e lo crea se non esiste o tronca un file esistente alla dimensione di 0 se esiste. Questo metodo genera un’eccezione IllegalArgumentException se viene specificata una combinazione non valida di opzioni e un’eccezione UnsupportedOperationException se viene specificata un’opzione non supportata.
  30. notExists(Path path, LinkOption opzioni): Questo metodo verifica se il file al percorso specificato non esiste. Il parametro opzioni viene utilizzato per indicare come vengono gestiti i collegamenti simbolici se il file è un collegamento simbolico. Per impostazione predefinita, vengono seguiti i collegamenti simbolici. Se è presente l’opzione NOFOLLOW_LINK, i collegamenti simbolici non vengono seguiti. Questo metodo restituisce true se il file non esiste al percorso specificato e false se il file esiste o se la sua esistenza non può essere determinata.
  31. readAllBytes(Path path): Questo metodo legge tutti i byte dal file nel percorso specificato e restituisce l’array di byte contenente i byte letti dal file.
  32. readAllLines(Path path, Charset cs): Questo metodo legge tutte le righe dal file nel percorso specificato e restituisce la List contenente le righe dal file.
  33. dimensioni (Percorso percorso): Questo metodo restituisce la dimensione del file nel percorso specificato in byte.
  34. walkFileTree(Percorso inizio, FileVisitor<? Super Percorso> visitatore): Questo metodo viene utilizzato per attraversare la directory. Attraversa la directory nel percorso specificato in modo ricorsivo e restituisce il file di partenza.
  35. scrivi(Percorso percorso, byte[] bytes, OpenOption… opzioni): Questo metodo scrive i byte in un file nel percorso specificato. Il parametro opzioni specifica come il file viene creato o aperto. Se nessuna opzione è specificata, vengono considerate per impostazione predefinita le opzioni CREATE, TRUNCATE_EXISTING e WRITE, il che significa che il file viene aperto per la scrittura e creato se il file non esiste o troncato se esiste già a dimensione 0. Tutti i byte nell’array di byte vengono scritti nel file. Questo metodo si assicura che il file venga chiuso quando tutti i byte sono stati scritti e restituisce il percorso del file scritto.

Crea file utilizzando la classe Files

La classe Files fornisce il metodo createFile(Percorso percorsoFile, FileAttribute<?>... attributi) per creare un file utilizzando il percorso specificato. Vediamo il programma di esempio di seguito.

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) {
		
		//inizializza l'oggetto Percorso
		Path path = Paths.get("D:/data/file.txt");
		//crea il file
		try {
			Path createdFilePath = Files.createFile(path);
			System.out.println("File Created at Path : "+createdFilePath);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

L’output del programma precedente è il seguente:

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

Crea directory usando la classe Files

La classe Files fornisce i metodi createDirectory(Path dir, FileAttribute<?>… attrs) e createDirectories(Path dir, FileAttribute<?>… attrs) per creare directory singole e a più livelli utilizzando il percorso specificato Path. Diamo un’occhiata al programma di esempio qui sotto.

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) {
		// inizializza gli oggetti Path
		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();
		}
	}
}

L’output del programma precedente è il seguente:

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

Converti File in Path e Viceversa

Gli oggetti File e Path possono essere convertiti l’uno nell’altro utilizzando i seguenti metodi:

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

Path path = file.toPath();

File file1 = path.toFile();

Leggi i dati del file usando la classe Files

La classe Files fornisce i seguenti metodi per leggere il file.

  1. readAllBytes(Path path): Questo metodo legge tutti i byte dal file al percorso specificato e restituisce l’array di byte contenente i byte letti dal file.
  2. readAllLines(Path path,Charsetcs): Questo metodo legge tutte le righe dal file nel percorso specificato e restituisce la List contenente le righe dal file.

Diamo un’occhiata al programma di esempio qui sotto.

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();
		}
	}

}

Output del programma precedente è il seguente:

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

Copia File usando la Classe Files

La classe Files fornisce il metodo copy(Path source, Path target, CopyOption… options) che copia il file di origine specificato nel file di destinazione specificato e restituisce il percorso del file di destinazione. Diamo un’occhiata al programma di esempio qui sotto:

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();
		}

	}

}

Output del programma precedente è il seguente:

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

Sposta File usando la Classe Files

La classe Java Files fornisce il metodo `move(Path source, Path target, CopyOption… options)` che sposta o rinomina un file di origine nel file di destinazione e restituisce il percorso del file di destinazione. Il parametro di opzione può includere quanto segue: REPLACE_EXISTING: Significa che se il file di destinazione esiste, lo sostituisce se non è una directory non vuota. ATOMIC_MOVE: Significa che lo spostamento viene eseguito come operazione atomico del sistema di file e tutte le altre opzioni vengono ignorate. Questo metodo genera un’eccezione `FileAleadyExistsException` se il file di destinazione esiste ma non può essere sostituito perché l’opzione REPLACE_EXISTING non è specificata. Questo metodo genera un’eccezione `DirectoryNotEmptyException` se l’opzione REPlACE_EXISTING è specificata ma il file non può essere sostituito perché è una directory non vuota. Diamo un’occhiata al seguente esempio di programma:

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();
		}
	}

}

Scrivi file usando la classe Files

La classe Java NIO Files fornisce il metodo write(Path path, byte[] bytes, OpenOption… options) che scrive byte su un file nel percorso specificato. Il parametro delle opzioni specifica come il file viene creato o aperto. Se nessuna opzione viene specificata, vengono considerate le opzioni CREATE, TRUNCATE_EXISTING e WRITE per impostazione predefinita. Ciò significa che il file viene aperto per la scrittura e creato se non esiste o troncato a una dimensione di 0 se esiste. Tutti i byte nell’array di byte vengono scritti nel file. Questo metodo garantisce che il file venga chiuso quando tutti i byte sono stati scritti e restituisce il percorso del file scritto.

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

La classe Files fornisce il metodo walkFileTree(Path start, FileVisitor<? Super Path> visitor) che viene utilizzato per attraversare la directory. Attraversa la directory nel percorso specificato in modo ricorsivo e restituisce il file di partenza.

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();
		}

	}

}

L’output del programma sopra è il seguente:

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

Si noti che tutti i file e le cartelle vengono elaborati in modo ricorsivo. Questo è molto utile quando si desidera eseguire una elaborazione comune su tutti i file, ad esempio rinominare tutti i file in una directory in modo ricorsivo. Questo è tutto per la classe Files di Java. Riferimento: API Doc

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