Saltar la navegación

2.1.- Clase File.

¿Para qué sirve esta clase, qué nos permite? La clase File proporciona una representación abstracta de ficheros y directorios.

Esta clase, permite examinar y manipular archivos y directorios, independientemente de la plataforma en la que se esté trabajando: Linux, Windows, etc.

Las instancias de la clase File representan nombres de archivo, no los archivos en sí mismos.

El archivo correspondiente a un nombre puede ser que no exista, por esta razón habrá que controlar las posibles excepciones.

Un objeto de clase File permite examinar el nombre del archivo, descomponerlo en su rama de directorios o crear el archivo si no existe, pasando el objeto de tipo File a un constructor adecuado como FileWriter(File f), que recibe como parámetro un objeto File.

Para archivos que existen, a través del objeto File, un programa puede examinar los atributos del archivo, cambiar su nombre, borrarlo o cambiar sus permisos. Dado un objeto File, podemos hacer las siguientes operaciones con él:

  • Renombrar el archivo, con el método renameTo(). El objeto File dejará de referirse al archivo renombrado, ya que el String con el nombre del archivo en el objeto File no cambia.
  • Borrar el archivo, con el método delete(). También, con deleteOnExit() se borra cuando finaliza la ejecución de la máquina virtual Java.
  • Crear un nuevo fichero con un nombre único. El método estático createTempFile() crea un fichero temporal y devuelve un objeto File que apunta a él. Es útil para crear archivos temporales, que luego se borran, asegurándonos tener un nombre de archivo no repetido.
  • Establecer la fecha y la hora de modificación del archivo con setLastModified(). Por ejemplo, se podría hacer: new File("prueba.txt").setLastModified(new Date().getTime()); para establecerle la fecha actual al fichero que se le pasa como parámetro, en este caso prueba.txt.
  • Crear un directorio, mediante el método mkdir(). También existe mkdirs(), que crea los directorios superiores si no existen.
  • Listar el contenido de un directorio. Los métodos list() y listFiles() listan el contenido de un directorio. list() devuelve un vector de String con los nombres de los archivos, listFiles() devuelve un vector de objetos File.
  • Listar los nombres de archivo de la raíz del sistema de archivos, mediante el método estático listRoots().
La clase proporciona los siguientes constructores para crear objetos File:
  • public File(String nombreFichero|path);
  • public File(String path, String nombreFichero|path);
  • public File(File path, String nombreFichero|path);
La ruta o path puede ser absoluta o relativa.
Ejemplos utilizando el primer constructor:
  • File f = new File("personas.dat");
    Crea un Objeto File asociado al fichero personas.dat que se encuentra en el directorio de trabajo. En este caso no se indica path. Se supone que el fichero se encuentra en el directorio actual de trabajo.
  • File f = new File("ficheros/personas.dat");
    Crea un Objeto File asociado al fichero personas.dat que se encuentra en el directorio ficheros dentro del directorio actual.  En este caso se indica la ruta relativa tomando como base el directorio actual de trabajo. Se supone que el fichero personas.dat se encuentra en el directorio ficheros. A su vez el directorio ficheros se encuentra dentro del directorio actual de trabajo.
  • File f = new File("c:/ficheros/personas.dat"); 
    Crea un Objeto File asociado al fichero personas.dat dando la ruta absoluta:
Ejemplos utilizando el segundo constructor:
En este caso se crea un objeto File cuya ruta (absoluta o relativa) se indica en el primer String.
  • File f = new File("ficheros", "personas.dat" ); 
    Crea un Objeto File asociado al fichero personas.dat que se encuentra en el directorio ficheros dentro del directorio actual. En este caso se indica la ruta relativa tomando como base el directorio actual de trabajo.
Ejemplos utilizando el tercer constructor:
Este constructor permite crear un objeto File cuya ruta se indica a través de otro objeto File.
  • File ruta = new File("ficheros");
    File f = new File(ruta, "personas.dat" );
    Crea un Objeto File asociado al fichero personas.dat que se encuentra en el directorio ficheros dentro del directorio actual.
Debemos tener en cuenta que crear un objeto File no significa que deba existir el fichero o el directorio o que el path sea correcto.
Si no existen no se lanzará ningún tipo de excepción ni tampoco serán creados.
Métodos
Alguno de los métodos de la clase File son los siguientes:
Método
Descripción
boolean canRead()
Devuelve true si se puede leer el fichero
boolean canWrite()
Devuelve true si se puede escribir en el fichero
boolean createNewFile()
Crea el fichero asociado al objeto File. Devuelve true si se ha podido crear. Para poder crearlo el fichero no debe existir. Lanza una excepción del tipo IOException.
boolean delete()
Elimina el fichero o directorio. Si es un directorio debe estar vacío. Devuelve true si se ha podido eliminar.
boolean exists()
Devuelve true si el fichero o directorio existe
String getName()
Devuelve el nombre del fichero o directorio
String getAbsolutePath()
Devuelve la ruta absoluta asociada al objeto File.
String getCanonicalPath()
Devuelve la ruta única absoluta asociada al objeto File. Puede haber varias rutas absolutas asociadas a un File pero solo una única ruta canónica. Lanza una excepción del tipo IOException.
String getPath()
Devuelve la ruta con la que se creó el objeto File. Puede ser relativa o no.
String getParent()
Devuelve un String conteniendo el directorio padre del File. Devuelve null si no tiene directorio padre.
File getParentFile()
Devuelve un objeto File conteniendo el directorio padre del File. Devuelve null si no tiene directorio padre.
boolean isAbsolute()
Devuelve true si es una ruta absoluta
boolean isDirectory()
Devuelve true si es un directorio válido
boolean isFile()
Devuelve true si es un fichero válido
long lastModified()
Devuelve un valor en milisegundos que representa la última vez que se ha modificado (medido desde las 00:00:00 GMT, del 1 de Enero de 1970). Devuelve 0 si el fichero no existe o ha ocurrido un error.
long length()
Devuelve el tamaño en bytes del fichero. Devuelve 0 si no existe. Devuelve un valor indeterminado si es un directorio.
String[] list()
Devuelve un array de String con el nombre de los archivos y directorios que contiene el directorio indicado en el objeto File. Si no es un directorio devuelve null. Si el directorio está vacío devuelve un array vacío.
String[] list(FilenameFilter filtro)
Similar al anterior. Devuelve un array de String con el nombre de los archivos y directorios que contiene el directorio indicado en el objeto File que cumplen con el filtro indicado.
boolean mkdir()
Crea el directorio. Devuelve true si se ha podido crear.
boolean mkdirs()
Crea el directorio incluyendo los directorios no existentes especificados en la ruta padre del directorio a crear. Devuelve true si se ha creado el directorio y los directorios no existentes de la ruta padre.
boolean renameTo(File dest)
Cambia el nombre del fichero por el indicado en el parámetro dest. Devuelve true si se ha realizado el cambio.

Autoevaluación

Señala si la afirmación es verdadera o falsa:

Pregunta 1

Podemos establecer la fecha de modificación de un archivo mediante el método renameTo().