Archivos en Java
Archivos en Java
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
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 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 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 fichero.getPath());
System.out.println 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