Java NIO - File

Il pacchetto Java NIO fornisce un'altra API di utilità denominata File che viene utilizzata fondamentalmente per manipolare file e directory utilizzando i suoi metodi statici che funzionano principalmente sull'oggetto Path.

Come menzionato nel tutorial Path, l'interfaccia Path è stata introdotta nel pacchetto Java NIO durante la versione Java 7 nel pacchetto file, quindi questo tutorial è per lo stesso pacchetto file.

Questa classe è costituita esclusivamente da metodi statici che operano su file, directory o altri tipi di file. Nella maggior parte dei casi, i metodi qui definiti delegheranno al provider del file system associato l'esecuzione delle operazioni sui file.

Ci sono molti metodi definiti nella classe Files che possono essere letti anche da documenti Java. In questo tutorial abbiamo cercato di coprire alcuni dei metodi importanti tra tutti i metodi della classe Java NIO Files.

Metodi importanti della classe Files.

Di seguito sono riportati i metodi importanti definiti nella classe Java NIO Files.

  • createFile(Path filePath, FileAttribute attrs) - La classe Files fornisce questo metodo per creare file utilizzando Path specificato.

Esempio

package com.java.nio;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CreateFile {
   public static void main(String[] args) {
      //initialize Path object
      Path path = Paths.get("D:file.txt");
      //create file
      try {
         Path createdFilePath = Files.createFile(path);
         System.out.println("Created a file at : "+createdFilePath);
      } 
      catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Produzione

Created a file at : D:\data\file.txt
  • copy(InputStream in, Path target, CopyOption… options) - Questo metodo viene utilizzato per copiare tutti i byte dal flusso di input specificato al file di destinazione specificato e restituisce il numero di byte letti o scritti come valore lungo. LinkOption per questo parametro con i seguenti valori:

    • COPY_ATTRIBUTES - copia gli attributi nel nuovo file, ad esempio l'attributo dell'ora dell'ultima modifica.

    • REPLACE_EXISTING - sostituire un file esistente se esiste.

    • NOFOLLOW_LINKS - Se un file è un collegamento simbolico, viene copiato il collegamento stesso, non la destinazione del collegamento.

Esempio

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;
public class WriteFile {
   public static void main(String[] args) {
      Path sourceFile = Paths.get("D:file.txt");
      Path targetFile = Paths.get("D:fileCopy.txt");
      try {
         Files.copy(sourceFile, targetFile,
         StandardCopyOption.REPLACE_EXISTING);
      }
      catch (IOException ex) {
         System.err.format("I/O Error when copying file");
      }
      Path wiki_path = Paths.get("D:fileCopy.txt");
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         List<String> lines = Files.readAllLines(wiki_path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }	
}

Produzione

To be or not to be?
  • createDirectories(Path dir, FileAttribute<?>...attrs) - Questo metodo viene utilizzato per creare directory utilizzando un determinato percorso creando tutte le directory padre inesistenti.

  • delete(Path path) - Questo metodo viene utilizzato per eliminare il file dal percorso specificato e genera NoSuchFileException se il file non esiste nel percorso specificato o se il file è una directory e potrebbe non essere vuoto e non può essere eliminato.

  • exists(Path path) - Questo metodo viene utilizzato per verificare se il file esiste nel percorso specificato e se il file esiste restituirà true oppure restituirà false.

  • readAllBytes(Path path) - Questo metodo viene utilizzato per leggere tutti i byte dal file in un determinato percorso e restituisce la matrice di byte contenente i byte letti dal file.

Esempio

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class ReadFile {
   public static void main(String[] args) {
      Path wiki_path = Paths.get("D:file.txt");
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         List<String> lines = Files.readAllLines(wiki_path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }	
}

Produzione

Welcome to file.
  • size(Path path) - Questo metodo viene utilizzato per ottenere la dimensione del file nel percorso specificato in byte.

  • write(Path path, byte[] bytes, OpenOption… options) - Questo metodo viene utilizzato per scrivere byte in un file nel percorso specificato.

Esempio

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class WriteFile {
   public static void main(String[] args) {
      Path path = Paths.get("D:file.txt");
      String question = "To be or not to be?";
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         Files.write(path, question.getBytes());
         List<String> lines = Files.readAllLines(path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }
}

Produzione

To be or not to be?