Tema 5. Manejo de Ficheros en Java
Tema 5. Manejo de Ficheros en Java
Manejo de
ficheros en Java
C H R I S TO P H E R E X P Ó S I TO I Z Q U I E R D O
A I R A M E X P Ó S I TO M Á R Q U E Z
I S R A E L LÓ P E Z P L ATA
M A R Í A B E L É N M E L I Á N B AT I S TA
JOSÉ MARCOS MORENO VEGA
El archivo
• Se considera un archivo (fichero) en informática a un conjunto de datos que se encuentran
almacenados en un dispositivo
• Este conjunto de datos viene agrupado por un nombre, una ruta de acceso y una extensión
• Los ficheros se guardan en dispositivos de almacenamiento fijo como discos duros, pendrives,
tarjetas, CD, etc.
Sistema de ficheros
• Los ficheros se suelen organizar de forma jerárquica
Directorio o carpeta: Fichero que contiene otros ficheros. Sirve para organizar de forma
jerárquica los diferentes ficheros
Ficheros especiales: Ficheros que sirven para controlar los diferentes periféricos conectados
al ordenador
Rutas
• Para acceder a un determinado fichero, se utiliza la ruta (path)
• Una ruta indica la dirección del fichero en el sistema de archivos
• En una ruta, cada nivel de la jerarquía se representa delimitado por el símbolo /. En Windows, el
símbolo separador es \
• Además de /, existen 2 elementos especiales en la ruta
• . Representa al directorio actual
• .. Representa al directorio padre en la jerarquía
Informática Automática
Codigo Informe
Extensión de un fichero
• La extensión sirve para asociar un determinado fichero con un programa/s que lo ejecuten o interpreten
• Indica cómo debe ser interpretado el fichero
• Se considera extensión lo existente a partir del último punto del nombre del archivo
• Hola.doc Extensión = doc
• Hola.doc.mp3 Extensión = mp3
El archivo
• En un ordenador, lo único que se es capaz de manejar es un conjunto de bits (0, 1)
• Interpretar el significado de estos bytes es responsabilidad del programa que manipula este fichero
Operaciones con ficheros
• Apertura: El programa abre el fichero y se prepara para leerlo o escribirlo. Suele “reservar” el fichero
para sí
• Cierre: Indica que se ha finalizado con las operaciones sobre el fichero. Libera el fichero
• Lectura: Lee el fichero o una de sus partes
• Escritura: Permite escribir en el fichero, ya sea añadiendo datos o sobrescribiendo los ya existentes
• Ejecución: Similar a la lectura, pero utiliza los datos del fichero para ejecutar un software
• Creación: Crea un nuevo fichero con un nombre, extensión y ruta determinados
• Eliminación: Elimina un fichero determinado
Permisos sobre ficheros
• El usuario que crea el fichero tiene derecho a decidir quien y cómo accede a su fichero
• Es por ello por lo que los sistemas utilizan diferentes codificaciones de caracteres, donde se utiliza mas de un byte para
representar caracteres
• Algunas comunes:
• UTF-8, 16, 32
• ANSI
• Estándar por idiomas ISO-XXXX
Fichero en Java
• En Java se sigue el concepto de un fichero como un conjunto de bytes
• En Java se permiten hacer todas las operaciones con ficheros vistas anteriormente:
• Apertura y cierre
• Lectura y escritura
• Creación y eliminación
Apertura y cierre de un fichero
• Cuando se abre un fichero en Java, se “reserva” el fichero para operar con el
• Se establece un flujo de datos desde el fichero a una variable en Java, que representa al fichero
• A partir de esa variable, se pueden realizar todas las operaciones sobre fichero que se quieran
• Cuando se quiere dejar de usar el fichero, se debe cerrar el mismo, cortando el flujo de datos y liberando la variable
• Con esta clase se pueden hacer un gran número de operaciones sobre un fichero y sus propiedades, pero no se permite
leer ni escribir
• También permite obtener datos del fichero, como rutas, nombres, permisos e incluso si existe
• El resto de clases que manipulan ficheros parten de la existencia de una clase File, por lo que es la base de cualquier
operación de manipulación de ficheros
La clase File
• El constructor de la clase File tiene el siguiente esquema:
• Al crear el constructor, la variable variableFichero es un objeto con los datos del fichero que se encuentra en la ruta
pasada por parámetro, si es que existe
• La ruta puede ser absoluta o relativa
• Con esto se cierra el fichero y la variable variableFichero pasará a ser nula (null)
La clase File
• Además de la apertura y cierre, la clase File permite realizar un gran número de operaciones:
• Comprobar si el fichero existe
• Crear un fichero
• Borrar el fichero
• Obtener nombre, rutas (absolutas y relativas) y extensión del fichero
• Decir si el fichero es un fichero o un directorio
• Obtener el tamaño en bytes del fichero
• Consultar y cambiar los permisos del fichero
• Si es un directorio, obtener la lista de ficheros que contiene el mismo
• Crear nuevos directorios
• Renombrar fichero
• Etc.
fichero.close();
}
Stream de datos
• Para poder realizar las operaciones de lectura y escritura de ficheros, Java establece lo que se conoce como un Stream
de datos
• Crea una vía de comunicación entre programa y fichero que permite “moverse” por las distintas partes del fichero
• Existe un puntero que apunta a las partes del fichero
Variable
Lectura de datos de un fichero
• Para leer datos de un fichero de texto, utilizaremos las siguientes clases:
• Clase File: Para representar el fichero que se quiere leer
• Clase FileReader: Establece el stream de datos de lectura del fichero. Tiene una serie de métodos para leer carácter a carácter. Al
constructor del FileReader recibe el objeto File
• Clase BufferedReader: Crea un buffer a través del FileReader, que permite leer mas de un carácter. El constructor recibe el FileReader
como parámetro
• Teniendo en cuenta el funcionamiento de readLine(), se puede leer todo el fichero utilizando un bucle while
String linea;
while((linea=buffer.readLine()) != null) {
System.out.println(linea);
}
Lectura de datos de un fichero
import java.io.*;
class LeeFichero {
public static void main(String [] arg) {
File archivo = null;
FileReader reader = null;
BufferedReader buffer = null;
try {
archivo = new File("C:\\directorioArchivo\\archivo.txt");
reader = new FileReader (archivo);
buffer = new BufferedReader(reader);
String linea;
while( (linea=buffer.readLine()) != null) {
System.out.println(linea);
}
}
catch(Exception e){
e.printStackTrace();
}finally{
try{
if( null != fr ){
fr.close();
}
}catch (Exception e2){
e2.printStackTrace();
}
}
}
}
Escritura de datos de un fichero
• Para escribir datos en un fichero de texto, utilizaremos las siguientes clases:
• Clase File: Para representar el fichero que se quiere leer
• Clase FileWriter: Establece el stream de datos de escritura del fichero. Tiene una serie de métodos para escribir en ficheros. Al
constructor del FileWriter recibe el objeto File
• Clase PrintWriter: Crea un buffer a través del FileWriter, que permite extender los métodos del FileWriter por otros similares a los que
tenemos en la salida de pantalla. El constructor recibe el FileWriter como parámetro
• El constructor del FileWriter puede recibir un segundo parámetro boolean que indica si queremos escribir el fichero
desde cero (false) o si queremos añadir texto al existente (true)
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != fichero) {
fichero.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
Borrado de un fichero
• Para borrar un fichero, se utiliza la clase File
• Existe la función delete() que elimina el fichero
if (fichero.exists()) {
System.out.println("Nombre del archivo "+ fichero.getName());
System.out.println(“Ruta "+ fichero.getPath());
System.out.println(“Ruta absoluta "+ fichero.getAbsolutePath());
System.out.println("Se puede escribir "+fichero.canRead());
System.out.println("Se puede leer "+fichero.canWrite());
System.out.println("Tamaño "+fichero.length());
}
fichero.delete();
}
Posibles problemas
• Algunos son:
• Intentar leer/borrar/escribir sobre un fichero que no existe
• Intentar leer/borrar/escribir sobre un fichero que ya está siendo modificado por otro programa
• Intentar escribir o leer un fichero cuando el puntero haya llegado al final del fichero (EOF)
Control de excepciones
• Java tiene un sistema para controlar los errores que se pueden producir durante la ejecución, llamado control de
excepciones
• Se basa en que cuando se produce un error que no se quiere controlar en ese punto, se lanza una excepción
• Facilita el control de errores, ya que distintos tipos de excepciones se pueden controlar de la misma forma
try {
//SENTENCIAS A EJECUTAR
} catch (Exception e) {
//SENTENCIAS QUE SE EJECUTAN SI HAY ERROR
}
• Como parámetro, el catch pone el tipo de excepción a controlar. Si se quieren controlar todas, se usa
Exception
• La sentencia finally es opcional, y contiene las sentencias que se van a ejecutar exista o no una excepción
Control de excepciones
import java.io.*;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != fichero) {
fichero.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
Control de excepciones
• Si las excepciones no se controlan, se muestra el detalle por consola. Muestra la pila de ejecución
Descripción excepción
Tipo excepción
StudentException: Error finding students
at StudentManager.findStudents(StudentManager.java:13)
at StudentProgram.main(StudentProgram.java:9)
Caused by: DAOException: Error querying students from database
at StudentDAO.list(StudentDAO.java:11)
Pila ejecución at StudentManager.findStudents(StudentManager.java:11)
... 1 more
Caused by: java.sql.SQLException: Syntax Error
at DatabaseUtils.executeQuery(DatabaseUtils.java:5)
at StudentDAO.list(StudentDAO.java:8)
... 2 more