Saltar la navegación

5.2.- Clases Java NIO Files.

La clase java.nio.file.Files es el otro punto de entrada a la librería de ficheros de Java. Es la que nos permite manejar ficheros reales del disco desde Java.

Esta clase tiene métodos estáticos para el manejo de ficheros, los métodos de la clase Files trabajan sobre objetos Path. 

Las operaciones principales a realizar con archivos y directorios son:

  • Verificación de existencia y accesibilidad
  • Borrar un archivo o directorio
  • Copiar un archivo o directorio
  • Mover un archivo o directorio

Veamos cómo se realizan algunas de estas operaciones.

Ejemplo 1: Existencia y comprobación de permisos

import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files; 
public class FileEjemplo {
public static void main(String args[]) {
    Path path = Paths.get("C:\\Users\\alumno\\FileEjamplo\\hola.txt");
    System.out.println(" path = " + path);
    System.out.println(" exists = " + Files.exists(path));
    System.out.println(" readable = " + Files.isReadable(path));
    System.out.println(" writeable = " + Files.isWritable(path));
    System.out.println(" executeable = " + Files.isExecutable(path))
Ejemplo2: Creación y borrado de directorios
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.IOException;
// Crea un nuevo fichero o directorio o lo borra si ya existe
public class FileEjemplo2 {
public static void main(String args[]) {
    Path path = Paths.get("C:\\Users\\alumno\\prueba");
    try {
    if (Files.exists(path))
         Files.delete(path);
         else
         Files.createFile(path);
      } catch (IOException e) {
     System.err.println(e);
      System.exit(1);
    }
}
}
El método  delete(Path) borra el fichero o directorio o lanza una excepción si el borrado falla. El siguiente ejemplo muestra como capturar y gestionar las excepciones que pueden producirse en el borrado  Si el fichero o directorio no existe la excepción que se produce es  NoSuchFileException. Los sucesivos cath permiten determinar por  que ha fallado el borrado:
try {
    Files.delete(path);
} catch (NoSuchFileException x) {
    System.err.format("%s: no such" + " file or directory%n", path);
} catch (DirectoryNotEmptyException x) {
    System.err.format("%s not empty%n", path);
} catch (IOException x) {
    // File permission problems are caught here.
    System.err.println(x);
}

El metodo deleteIfExists(Path) tambien borra el fichero o directorio, pero no lanza ningun error en caso de que el fichero o directorio no exista.

Ejemplo3: crear un directorio

import java.nio.file.Path; 
import java.nio.file.Paths;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.io.IOException;
// crea una nueva carpeta 
public class FileEjemplo4 
{
public static void main(String args[]) {
Path path = Paths.get("C:\\Users\\alumno\\newdir");
try {
    Path newDir = Files.createDirectory(path);
} catch(FileAlreadyExistsException e){
    // el directorio ya existe
} catch (IOException e) {
    //error I/O
              e.printStackTrace();
}
}
}

Ejemplo4: copiar directorios

Se puede copiar un archivo o directorio usando el método copy(Path, Path, CopyOption...). La copia falla si el archivo de destino existe, a menos que se especifique la opción REPLACE_EXISTING. 

Se puede copiar directorios  Aunque, los archivos dentro del directorio no se copian, por lo que el nuevo directorio está vacío incluso cuando el directorio original contiene archivos.

import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.io.IOException;
//import java.nio.file.FileAlreadyExistsException; //en caso de querer sobrescribir el directorio destino
public class FileEjemplo5 {
public static void main(String args[]) {
    Path sourcePath = Paths.get("C:\\Users\\alumno\\origen");
    Path destinationPath = Paths.get("C:\\Users\\alumno\\FileEjamplo\\destino");
    try {
    Files.copy(sourcePath, destinationPath);
                     //Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);
    } catch (FileAlreadyExistsException e) {
    System.out.println("el fichero existe");
     } catch (IOException e) {
     e.printStackTrace();
       }
}
}

Ejemplo 5: Copiar ficheros

import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class FileEjemplo7 {
public static void main(String args[]) {
    Path sourcePath = Paths.get("C:\\Users\\alumno\\FileEjamplo\\hola.txt");
    Path destinationPath =Paths.get("C:\\Users\\alumno\\FileEjamplo\\destino\\hola.txt");
    try {
       Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);
      } catch (FileAlreadyExistsException e) {
       System.out.println("el destino existe");
     } catch (IOException e) {
     e.printStackTrace();
  }
 }
}

Ejemplo 6: Mover ficheros y directorios, cambiando el nombre

import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class FileEjemplo7 {
public static void main(String args[]) {
Path sourcePath = Paths.get("C:\\Users\\alumno\\FileEjamplo\\hola.txt");
Path destinationPath = Paths.get("C:\\Users\\alumno\\FileEjamplo\\destino\\OtroNombre.txt");
try {
Files.move(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING);
} catch (FileAlreadyExistsException e) {
System.out.println("el destino existe");
} catch (IOException e) {
e.printStackTrace();
}
}
}