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