SlideShare una empresa de Scribd logo
1 de 42
11. LECTURAY ESCRITURA DE INFORMACIÓN
11. LECTURAY ESCRITURA DE INFORMACIÓN
1. Introducción
2. Formas de acceso a un fichero. Clases asociadas
3. Flujos o Streams.Tipos.
4. Formas de acceso a un fichero
5. Operaciones sobre ficheros
6. Clases para gestión de flujos de datos desde/hacia ficheros
Contenidos de la unidad
11. LECTURAY ESCRITURA DE INFORMACIÓN
En esta unidad se muestran algunas alternativas diferentes para trabajar con ficheros. Aunque no son todas las
posibles, estas soluciones pueden considerarse una referencia dentro de las soluciones actuales respecto al
almacenamiento de datos en ficheros.
Aunque las diferentes alternativas de acceso a ficheros mostradas en el capítulo se han trabajado desde la
perspectiva de Java, la mayoría de entornos de programación dan soporte a estas mismas alternativas, aunque con
otra sintaxis (por ejemplo, Microsoft .NET).
Las primeras secciones del capítulo se centran en el acceso a ficheros desde Java (flujos). Para comprender
adecuadamente estos contenidos, es recomendable que el lector esté familiarizado con conceptos básicos de
programación en Java.
1. Introducción
11. LECTURAY ESCRITURA DE INFORMACIÓN
Un fichero o archivo es un conjunto de bits almacenado en un dispositivo, como por ejemplo un disco duro. Una de
las ventajas de usar ficheros es que éstos no son volátiles. Los ficheros tienen un nombre y se ubican en directorios
o carpetas, el nombre debe ser único en ese directorio. Por convención cuentan con diferentes extensiones que por
lo general suelen ser tres letras (PDF, DOC, GIF, …) y nos permiten saber el tipo de archivo.
1. Introducción
11. LECTURAY ESCRITURA DE INFORMACIÓN
Antes de ver las clases que leen y escriben datos en ficheros, vamos a manejar la clase File:
File es una clase dentro del paquete java.io
Representa un archivo o directorio dentro de un sistema de ficheros.
Un objeto de la clase File representa el nombre de un fichero o directorio.
Los métodos de File permiten obtener toda la información sobre las características del fichero o directorio.
2. Formas de acceso a un fichero. Clases asociadas.
11. LECTURAY ESCRITURA DE INFORMACIÓN
2. Formas de acceso a un fichero. Clases asociadas.
11. LECTURAY ESCRITURA DE INFORMACIÓN
El siguiente ejemplo muestra la lista de ficheros del directorio actual utilizando el método list() que devuelve un array de Strings con los nombres de
los ficheros y directorios contenidos en el directorio asociado al objeto File:
import java.io.*;
public class VerDir {
public static void main (String[] args) {
System.out.println(“Ficheros en el directorio actual:“);
File f = new File(“.”);
String[] archivos = f.list();
for (int i = 0; i < archivos.length; i++) {
System.out.println(archivos[i]);
}
}
}
2. Formas de acceso a un fichero. Clases asociadas.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Algunos métodos importantes del objeto File son:
getName: devuelve el nombre del fichero o directorio.
getPath(): devuelve el camino relativo.
getAbsolutePath(): devuelve el camino absoluto del fichero/directorio.
canRead(): devuelve true si el fichero se puede leer.
canWrite(): devuelve true si el fichero se puede escribir.
length(): nos devuelve el tamaño del fichero en bytes.
createNewFile(): crea un nuevo fichero, vacío, asociado a File si y solo si no existe un fichero con dicho nombre.
2. Formas de acceso a un fichero. Clases asociadas.
11. LECTURAY ESCRITURA DE INFORMACIÓN
 delete(): borra el fichero o directorio asociado al File.
 exists(): devuelve true si el fichero/directorio existe.
 getParent(): devuelve el nombre del directorio padre, o null si no existe.
 isDirectory(): devuelve true si el objeto File corresponde a un directorio.
 isFile(): devuelve true si el objeto File corresponde a un fichero normal.
 mkdir(): crea un directorio con el nombre indicado en la creación del objeto File.
 renameTo(File nuevonombre): renombra el fichero.
2. Formas de acceso a un fichero. Clases asociadas.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Ejemplos de uso de la clase Clase File.
Código para la creación de un objeto File con un fichero llamado libros.xml
File f = new File(“proyectolibros.xml”);
Ejemplo de uso del objeto File
System.out.println (“Nombre:“ + f.getName());
System.out.println (“Directorio padre:“ + f.getParent());
System.out.println (“Ruta relativa:“ + f.getPath());
System.out.println (“Ruta absoluta:“ + f.getAbsolutePath());
2. Formas de acceso a un fichero. Clases asociadas.
11. LECTURAY ESCRITURA DE INFORMACIÓN
En Java, el acceso a ficheros es tratado como un flujo de información entre el programa y el fichero. Un flujo no es
más que un objeto que hace de intermediario entre el programa y el origen o el destino de la información. Esta
abstracción proporcionada por los flujos hace que los programadores, cuando quieren acceder a información, solo se
tengan que preocupar por trabajar con los objetos que proporcionan el flujo, sin importar el origen o el destino
concreto de donde vengan o vayan los datos.
Cualquier programa que tenga que obtener información de cualquier fuente necesita abrir un stream, igualmente si
necesita enviar información abrirá un stream y se escribirá la información.
La vinculación de este stream con el dispositivo físico la hace el sistema de entrada/salida de Java.
3. Flujos o Streams. Tipos.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Tenemos dos tipos de flujos:
Flujos de bytes (8 bits): su uso está orientado a la lectura/escritura de datos binarios.Todas las clases de flujos
de bytes descienden de las clases InputStream y OutputStream.
Flujos de caracteres (16 bits): realizan operaciones de entrada y salida de caracteres. El flujo de caracteres
viene gobernado por las clases Reader y Writer.
3. Flujos o Streams. Tipos.
11. LECTURAY ESCRITURA DE INFORMACIÓN
3.1. Flujos de bytes.
11. LECTURAY ESCRITURA DE INFORMACIÓN
3.2. Flujos de caracteres.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Hay dos formas de acceso a la información almacenada en un fichero:
Acceso secuencial: los datos o registros se leen y se escriben en orden. Si se quiere acceder a un dato es
necesario leer antes todos los anteriores. La escritura de datos se hace a partir del último dato escrito, no es posible
hacer inserciones entre los datos que ya hay escritos.
Acceso directo o aleatorio: permite acceder directamente a un datos o registro sin necesidad de leer los
anteriores y se puede acceder a la información en cualquier orden. Los datos están almacenados en registros de
tamaño conocido y nos podemos mover de un registro a otro de forma aleatoria para leerlos o modificarlos.
4. Formas de acceso a un fichero.
11. LECTURAY ESCRITURA DE INFORMACIÓN
4. Formas de acceso a un fichero
11. LECTURAY ESCRITURA DE INFORMACIÓN
Operaciones básicas sobre ficheros:
Creación del fichero.
Apertura del fichero.
Cierre del fichero
Lectura de los datos del fichero
Escritura de los datos en el fichero
5. Operaciones sobre ficheros.
11. LECTURAY ESCRITURA DE INFORMACIÓN
En los ficheros secuenciales los registros se insertan en orden cronológico. Si hay que añadir nuevos registros éstos
se añaden a partir del final del fichero:
Consultas: .para consultar un determinado registro es necesario empezar la lectura desde el primer registro, y
continuar leyendo secuencialmente hasta localizar el registro buscado.
Altas: las altas se realizan al final del último registro insertado, sólo se permite añadir datos al final del fichero.
Bajas: para dar de baja un registro es necesario hacer uso de un fichero auxiliar, leyendo todos los registros y
copiarlos todos a excepción del que queramos dar de baja. Por último renombraremos el fichero auziliar dándole el
nombre del fichero original.
Modificaciones: El proceso de modificaciones es similar al de bajas.
5.1. Operaciones sobre ficheros secuenciales.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Normalmente para posicionarnos en un registro es necesario aplicar una función de conversión que usualmente
tiene que ver con el tamaño del registro y con la clave del mismo.Veamos cómo se realizan las operaciones típicas:
Consultas: .para consultar un determinado registro necesitamos saber su clave y aplicar la función de conversión
para obtener la dirección del registro que queremos leer.
Altas: para insertar un registro necesitamos saber su clave, aplicar la función de conversión a la clave para obtener
la dirección y escribir el registro en la posición devuelta. Si la posición está ocupada por otro registro, el registro se
insertaría en la zona de excedentes.
Bajas: para realizar las bajas se suele utilizar un campo del registro a modo de switch que tenga el valor 1 cuando
el registro exista y le damos el valor 0 para darle de baja. Físicamente el registro no desaparece del disco.
Modificaciones: Para modificar un registro hay que localizarlo, modificar los datos que nos interesen y reescribir
el registro en esa posición.
5.2. Operaciones sobre ficheros aleatorios.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Clase FileReader
El flujo FileReader permite leer caracteres desde un fichero de modo secuencial. Esta clase hereda los métodos de la
clase Reader. Los constructores principales son:
FileReader(String ruta)
FileReader(File fichero)
El fichero puede abrirse con una ruta de directorios o con un objeto de tipo File.
Al usar la clase FileReader se puede generar la excepción FileNotFoundException.
6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Clase FileReader
Los métodos que proporciona la clase FileReader son los siguientes:
 int read(): lee un carácter y lo devuelve
 int read(char[] buf): lee hasta buf.length caracteres de datos de una matriz de caracteres (buf). Los caracteres leídos se van
almacenando en buf.
 int read(char[] buf. Int desplazamiento, int n): lee hasta n caracteres de datos de la matriz buf comenzando por
buf[desplazamiento] y devuelve el número leído de caracteres.
6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Clase FileReader
import java.io.*;
public class LeerFichTexto {
public static void main (String[] args) throws IOException {
//declarar fichero
File fichero = new File(“C:EJERCICIOSLeerFicheroTexto.java”);
FileReader fic = new FileReader(fichero); //Crear el flujo de entrada
int i;
while ((i = fic.read()) != -1) //Se va leyendo un carácter
System.out.println((char) i);
fic.close(); //cerrar fichero
}
}
6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
11. LECTURAY ESCRITURA DE INFORMACIÓN
FileReader no contiene métodos que nos permitan leer líneas completas, pero BufferedReader sí; dispone del
método readLine() que lee una línea del fichero y la devuelve, o devuelve null si no hay nada que leer o llegamos al
final del fichero. Para construir un BufferedReader necesitamos la clase FileReader:
BufferedReader fichero = new BufferedReader(new FileReader(NombreFichero));
6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Clase FileWriter
El flujo FileWriter permite escribir caracteres en un fichero de modo secuencial. Esta clase hereda los métodos
necesarios para ello de la clase Writer. Los constructores principales son:
FileWriter (String ruta, boolean añadir)
FileWriter(File fichero)
El parámetro ruta indica la localización del archivo en el sistema operativo. El parámetro añadir igual a true indica
que el fichero se usa para añadir datos a un fichero ya existente.
6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Clase FileWriter
Los métodos que proporciona la clase FileWriter son:
 void write(int c): escribe un carácter
 void write(char[] buf): escribe un array de caracteres
 void write(char[] buf, int desplazamiento, int n): escribe n caracteres de datos en la matriz buf y comenzando por
buf[desplazamiento].
 void write(String str): escribe una cadena de caracteres
 append(char c): añade un carácter a un fichero
Estos métodos también pueden lanzar la excepción IOException.
6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
11. LECTURAY ESCRITURA DE INFORMACIÓN
La clase BufferedWriter también deriva de la clase Writer. Esta clase añade un buffer para realizar una escritura
eficiente de caracteres. Para construir un BufferedWriter necesitamos un FileWriter:
BufferedWriter fichero = new BufferedWriter(new FileWriter(NombreFichero));
La clase PrintWriter posee los métodos print(String) y println(String) para escribir en un fichero.Ambos reciben un
String y los escriben en un fichero, el segundo método salta de línea. Para escribir un PrintWriter necesitamos la
clase FileWriter:
PrintWriter fichero = new PrintWriter(new FileWriter(NombreFichero));
6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Los ficheros binarios almacenan secuencias de dígitos binarios que no son legibles directamente por el usuario como
ocurría con los ficheros de texto.Tienen la ventaja de que ocupan menos espacio en el disco. En Java, las dos clases
que nos permiten trabajar con ficheros binarios son FileInputStream y FileOutputStream.
6.2. Clases para gestión de flujos de datos. Ficheros binarios.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Clase FileInputStream
El flujo FileInputStream permite leer bytes en un fichero de manera secuencial. Sus constructores tienen los mismos
parámetros que los mostrados para FileReader.
Los métodos que proporciona la clase FileInputStream son similares a los vistos para FileReader. Estos métodos
devuelven el número de bytes leídos o -1 si se ha llegado al final del fichero:
 int read()
 int read(byte[] b)
 int read(byte[] b, int desplazamiento, int n)
6.2. Clases para gestión de flujos de datos. Ficheros binarios.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Clase FileOutpuStream
El flujo FileOutputStream permite escribir bytes en un fichero de manera secuencial. Sus constructores tienen los
mismos parámetros que los mostrados para FileWriter: el fichero puede ser abierto vacío o listo para añadirle datos
a los que ya contenga.
Los métodos que proporciona la clase FileOutputStream son:
 void write(int b)
 void write(byte[] b)
 void write(byte[] b, int desplazamiento, int n)
6.2. Clases para gestión de flujos de datos. Ficheros binarios.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Para leer y escribir datos de tipos primitivos: int, float, long,… usaremos las clases DataInputStream y
DataOutputStream. Estas clases además de los métodos read() y write() proporcionan otros métodos de lectura y
escritura:
6.2. Clases para gestión de flujos de datos. Ficheros binarios.
MÉTODOS PARA LECTURA MÉTODOS PARA ESCRITURA
boolean readBoolean();
byte readByte();
int readUnsignedByte();
int readUnsignedShort();
short readShort();
char readChar();
int readInt();
long readLong();
float readFloat();
double readDouble();
String readUTF();
void writeBoolean(boolean v);
void writeByte(int v);
void writeUnsignedByte(String s);
void writeShort(int v);
void writeChars(String s);
void writeChar(int v);
void writeInt(int v);
void writeLong(long v);
void writeFloat(float v);
void writeDouble(doublé v);
void writeUTF(String str);
11. LECTURAY ESCRITURA DE INFORMACIÓN
Para abrir un objeto DataInputStream lo haremos de la siguiente forma:
File fichero = new File(“nombrefichero”);
FileInputStream filein = new FileInputStream(fichero);
DataInputStream dataIS = new DataInputStream(filein);
Para abrir un objeto DataOutputStream lo haremos de la siguiente forma:
File fichero = new File(“nombrefichero”);
FileOutputStream fileout = new FileOutputStream(fichero);
DataOutputStream dataOS = new DataOutputStream(fileout);
6.2. Clases para gestión de flujos de datos. Ficheros binarios.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Java dispone de la clase RandomAccessFile que contiene métodos para acceder al contenido de un fichero binario de forma aleatoria y para
posicionarnos en una posición concreta del mismo.
Disponemos de dos posibilidades para crear el fichero de acceso aleatorio:
Escribiendo el nombre del fichero:
fichero = new RandomAccessFile(String nombre, String modoAcceso);
Con un objeto File:
fichero = new RandomAccessFile(File fich, String modoAcceso);
El argumento modoAcceso puede ser “r” para solo lectura o “rw” para lectura y escritura.
La clase RandomAccessFile maneja un puntero que indica la posición actual en el fichero. Cuando el fichero se crea el puntero se coloca en 0. Las
sucesivas llamadas a los métodos read() y write() ajustan el puntero según la cantidad de bytes leídos o escritos.
6.3. Ficheros de acceso aleatorio.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Los métodos más importantes son:
long getFilePointer(): devuelve la posición actual del puntero del fichero.
void seek(long posicion): coloca el puntero del fichero en una posición determinada desde el comienzo del mismo.
long length(): devuelve el tamaño del fichero en bytes. La posición length() marca el final del fichero.
int skipBytes(int desplazamiento): desplaza el puntero desde la posición actual el número de bytes indicados en desplazamiento.
6.3. Ficheros de acceso aleatorio.
11. LECTURAY ESCRITURA DE INFORMACIÓN
A continuación vamos a ver un ejemplo de un programa que escribe un fichero aleatorio con los datos de empleados, teniendo en cuenta las
siguientes consideraciones:
Los datos a insertar son: apellido, departamento y salario.
Los datos se van introduciendo de forma secuencial, no se usará el método seek().
Por cada empleado también se insertará un identificador que coincidirá con el índice +1 con el que se recorren los arrays
La longitud del registro de cada empleado es la misma (36 bytes) y los tipos que se insertan y su tamaño en bytes es el siguiente:
 Identificador: es un entero, ocupa 4 bytes
 Apellido: cadena de 10 caracteres. Cada carácter Unicode ocupa 2 bytes, luego el apellido ocupa 20 bytes
 Departamento: es un entero, ocupa 4 bytes.
 Salario: es un doublé, ocupa 8 bytes.
Nota:Tamaño de otros tipos: short (2 bytes), byte (1 byte), long (8 bytes), boolean (1 bit), float (4 bytes), etc.
6.3. Ficheros de acceso aleatorio.
11. LECTURAY ESCRITURA DE INFORMACIÓN
6.3. Ficheros de acceso aleatorio.
11. LECTURAY ESCRITURA DE INFORMACIÓN
6.3. Ficheros de acceso aleatorio.
11. LECTURAY ESCRITURA DE INFORMACIÓN
Para insertar un nuevo registro aplicamos la función de conversión al identificador para calcular la posición. El siguiente código inserta un empleado
con identificador 20. Se ha de calcular la posición donde irá el registro dentro del fichero (identificador -1) * 36 bytes.
6.3. Ficheros de acceso aleatorio.
11. LECTURAY ESCRITURA DE INFORMACIÓN
OBJETOS SERIALIZABLES
Con lo visto hasta ahora, si, por ejemplo, tenemos un objeto de tipo empleado con varios atributos (nombre, dirección, salario, departamento,…) y
queremos guardarlo en un fichero, tendríamos que guardar cada atributo que forma parte del objeto por separado. Java nos permite guardar objetos
en ficheros binarios; para poder hacerlo, el objeto tiene que implementar la interfaz Serializable que dispone de una serie de métodos con los que
podremos guardar y leer objetos en ficheros binarios. Los más importantes son:
 void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException: para leer un objeto.
 void writeObject(java.io.ObjecOutputStream stream) throws IOException: para escribir un objeto.
Para leer y escribir objetos serializables a un stream se utilizan las clases Java ObjectInputStream y ObjectOutputStream respectivamente.
6.4. Clases para gestión de flujos de datos. Ficheros binarios. Objetos serializables.
11. LECTURAY ESCRITURA DE INFORMACIÓN
OBJETOS SERIALIZABLES
A continuación se muestra la clase Persona que implementa la interfaz Serializable y
que utilizaremos para escribir y leer objetos en un fichero binario.
6.4. Clases para gestión de flujos de datos. Ficheros binarios. Objetos serializables.
11. LECTURAY ESCRITURA DE INFORMACIÓN
OBJETOS SERIALIZABLES
El siguiente ejemplo escribe objetos Persona en un
fichero. Necesitamos crear un flujo de salida
FileOutputStream y a continuación se crea el flujo de
salida ObjectOutputStream, que es el que procesa
los datos.
El método writeObject() escribe los objetos al flujo de
salida y los guarda en un fichero.
6.4. Clases para gestión de flujos de datos. Ficheros binarios. Objetos serializables.
11. LECTURAY ESCRITURA DE INFORMACIÓN
OBJETOS SERIALIZABLES
Para leer objetos Persona de un fichero necesitamos el
flujo de entrada a disco FileInputStream y a
continuación crear el flujo de entrada
ObjectInputStream, que es el que procesa los datos.
El método readObject() lee los objetos del flujo de
entrada y puede lanzar la excepción
ClassNotFoundException.
6.4. Clases para gestión de flujos de datos. Ficheros binarios. Objetos serializables.
11. LECTURAY ESCRITURA DE INFORMACIÓN
OBJETOS SERIALIZABLES
ObjectOutputStream puede darnos algunos problemas, por ejemplo, si escribimos datos en el fichero y lo cerramos. Después volvemos a abrirlo
para añadir datos y entonces se escribe una nueva cabecera al final de los objetos introducidos anteriormente y después se van añadiendo el resto de
los datos. Esto origina el problema que al leer el fichero se produzca la excepción StreamCorruptedException.
6.4. Clases para gestión de flujos de datos. Ficheros binarios. Objetos serializables.

Más contenido relacionado

Similar a 11. lectura y escritura de información

Ficheros en Java marisabc
Ficheros en Java marisabcFicheros en Java marisabc
Ficheros en Java marisabcmarisabc4
 
Bryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficherosBryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficherosBryan Gordillo
 
Bryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficherosBryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficherosBryan Gordillo
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e ioprogramadorjavablog
 
Interfaz del Sistema de Archivos
Interfaz del Sistema de ArchivosInterfaz del Sistema de Archivos
Interfaz del Sistema de ArchivosAcristyM
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e ioprogramadorjavablog
 
Temas programacion java_3
Temas programacion java_3Temas programacion java_3
Temas programacion java_3Wally IG
 
Fichero c y c++
Fichero c y c++Fichero c y c++
Fichero c y c++mauro0210
 
Jyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientesJyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientesJyoc X
 
ARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE CARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE Cleonard1994
 
Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en javaWhaleejaa Wha
 
Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en javaMaiirOn Gaitan
 
Manejo+de+archivos+en+java
Manejo+de+archivos+en+javaManejo+de+archivos+en+java
Manejo+de+archivos+en+javaWhaleejaa Wha
 
Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en javaWhaleejaa Wha
 
Archvios Indexados
Archvios IndexadosArchvios Indexados
Archvios IndexadosAna Reyes
 

Similar a 11. lectura y escritura de información (20)

Acceso a datos
Acceso a datosAcceso a datos
Acceso a datos
 
Ficheros en Java marisabc
Ficheros en Java marisabcFicheros en Java marisabc
Ficheros en Java marisabc
 
Lab archivos
Lab archivosLab archivos
Lab archivos
 
Bryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficherosBryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficheros
 
Bryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficherosBryan gordillo ensayo_ficheros
Bryan gordillo ensayo_ficheros
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
 
Interfaz del Sistema de Archivos
Interfaz del Sistema de ArchivosInterfaz del Sistema de Archivos
Interfaz del Sistema de Archivos
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
 
Temas programacion java_3
Temas programacion java_3Temas programacion java_3
Temas programacion java_3
 
Fichero c y c++
Fichero c y c++Fichero c y c++
Fichero c y c++
 
Jyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientesJyoc java-cap14 persistencia. ficheros corrientes
Jyoc java-cap14 persistencia. ficheros corrientes
 
ARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE CARCHIVOS DEL LENGUAJE C
ARCHIVOS DEL LENGUAJE C
 
Gestión de archivos
Gestión de archivosGestión de archivos
Gestión de archivos
 
Archivos C++
Archivos C++Archivos C++
Archivos C++
 
Grupo nro4ficheros
Grupo nro4ficherosGrupo nro4ficheros
Grupo nro4ficheros
 
Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en java
 
Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en java
 
Manejo+de+archivos+en+java
Manejo+de+archivos+en+javaManejo+de+archivos+en+java
Manejo+de+archivos+en+java
 
Manejo de archivos en java
Manejo de archivos en javaManejo de archivos en java
Manejo de archivos en java
 
Archvios Indexados
Archvios IndexadosArchvios Indexados
Archvios Indexados
 

Más de Anuska González

Programación de servicios y procesos
Programación de servicios y procesosProgramación de servicios y procesos
Programación de servicios y procesosAnuska González
 
Programación multimedia y dispositivos móviles
Programación multimedia y dispositivos móvilesProgramación multimedia y dispositivos móviles
Programación multimedia y dispositivos móvilesAnuska González
 
Inicio del curso 2013 2014
Inicio del curso 2013 2014Inicio del curso 2013 2014
Inicio del curso 2013 2014Anuska González
 
Presentación seguridad informática
Presentación   seguridad informáticaPresentación   seguridad informática
Presentación seguridad informáticaAnuska González
 

Más de Anuska González (6)

Lenguajes de Marcas XML
Lenguajes de Marcas XMLLenguajes de Marcas XML
Lenguajes de Marcas XML
 
Programación de servicios y procesos
Programación de servicios y procesosProgramación de servicios y procesos
Programación de servicios y procesos
 
Programación multimedia y dispositivos móviles
Programación multimedia y dispositivos móvilesProgramación multimedia y dispositivos móviles
Programación multimedia y dispositivos móviles
 
Inicio del curso 2013 2014
Inicio del curso 2013 2014Inicio del curso 2013 2014
Inicio del curso 2013 2014
 
Presentación seguridad informática
Presentación   seguridad informáticaPresentación   seguridad informática
Presentación seguridad informática
 
Presentación de prueba
Presentación de pruebaPresentación de prueba
Presentación de prueba
 

Último

Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscaeliseo91
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxKarlaMassielMartinez
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 

Último (20)

Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
la unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fiscala unidad de s sesion edussssssssssssssscacio fisca
la unidad de s sesion edussssssssssssssscacio fisca
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 

11. lectura y escritura de información

  • 1. 11. LECTURAY ESCRITURA DE INFORMACIÓN
  • 2. 11. LECTURAY ESCRITURA DE INFORMACIÓN 1. Introducción 2. Formas de acceso a un fichero. Clases asociadas 3. Flujos o Streams.Tipos. 4. Formas de acceso a un fichero 5. Operaciones sobre ficheros 6. Clases para gestión de flujos de datos desde/hacia ficheros Contenidos de la unidad
  • 3. 11. LECTURAY ESCRITURA DE INFORMACIÓN En esta unidad se muestran algunas alternativas diferentes para trabajar con ficheros. Aunque no son todas las posibles, estas soluciones pueden considerarse una referencia dentro de las soluciones actuales respecto al almacenamiento de datos en ficheros. Aunque las diferentes alternativas de acceso a ficheros mostradas en el capítulo se han trabajado desde la perspectiva de Java, la mayoría de entornos de programación dan soporte a estas mismas alternativas, aunque con otra sintaxis (por ejemplo, Microsoft .NET). Las primeras secciones del capítulo se centran en el acceso a ficheros desde Java (flujos). Para comprender adecuadamente estos contenidos, es recomendable que el lector esté familiarizado con conceptos básicos de programación en Java. 1. Introducción
  • 4. 11. LECTURAY ESCRITURA DE INFORMACIÓN Un fichero o archivo es un conjunto de bits almacenado en un dispositivo, como por ejemplo un disco duro. Una de las ventajas de usar ficheros es que éstos no son volátiles. Los ficheros tienen un nombre y se ubican en directorios o carpetas, el nombre debe ser único en ese directorio. Por convención cuentan con diferentes extensiones que por lo general suelen ser tres letras (PDF, DOC, GIF, …) y nos permiten saber el tipo de archivo. 1. Introducción
  • 5. 11. LECTURAY ESCRITURA DE INFORMACIÓN Antes de ver las clases que leen y escriben datos en ficheros, vamos a manejar la clase File: File es una clase dentro del paquete java.io Representa un archivo o directorio dentro de un sistema de ficheros. Un objeto de la clase File representa el nombre de un fichero o directorio. Los métodos de File permiten obtener toda la información sobre las características del fichero o directorio. 2. Formas de acceso a un fichero. Clases asociadas.
  • 6. 11. LECTURAY ESCRITURA DE INFORMACIÓN 2. Formas de acceso a un fichero. Clases asociadas.
  • 7. 11. LECTURAY ESCRITURA DE INFORMACIÓN El siguiente ejemplo muestra la lista de ficheros del directorio actual utilizando el método list() que devuelve un array de Strings con los nombres de los ficheros y directorios contenidos en el directorio asociado al objeto File: import java.io.*; public class VerDir { public static void main (String[] args) { System.out.println(“Ficheros en el directorio actual:“); File f = new File(“.”); String[] archivos = f.list(); for (int i = 0; i < archivos.length; i++) { System.out.println(archivos[i]); } } } 2. Formas de acceso a un fichero. Clases asociadas.
  • 8. 11. LECTURAY ESCRITURA DE INFORMACIÓN Algunos métodos importantes del objeto File son: getName: devuelve el nombre del fichero o directorio. getPath(): devuelve el camino relativo. getAbsolutePath(): devuelve el camino absoluto del fichero/directorio. canRead(): devuelve true si el fichero se puede leer. canWrite(): devuelve true si el fichero se puede escribir. length(): nos devuelve el tamaño del fichero en bytes. createNewFile(): crea un nuevo fichero, vacío, asociado a File si y solo si no existe un fichero con dicho nombre. 2. Formas de acceso a un fichero. Clases asociadas.
  • 9. 11. LECTURAY ESCRITURA DE INFORMACIÓN  delete(): borra el fichero o directorio asociado al File.  exists(): devuelve true si el fichero/directorio existe.  getParent(): devuelve el nombre del directorio padre, o null si no existe.  isDirectory(): devuelve true si el objeto File corresponde a un directorio.  isFile(): devuelve true si el objeto File corresponde a un fichero normal.  mkdir(): crea un directorio con el nombre indicado en la creación del objeto File.  renameTo(File nuevonombre): renombra el fichero. 2. Formas de acceso a un fichero. Clases asociadas.
  • 10. 11. LECTURAY ESCRITURA DE INFORMACIÓN Ejemplos de uso de la clase Clase File. Código para la creación de un objeto File con un fichero llamado libros.xml File f = new File(“proyectolibros.xml”); Ejemplo de uso del objeto File System.out.println (“Nombre:“ + f.getName()); System.out.println (“Directorio padre:“ + f.getParent()); System.out.println (“Ruta relativa:“ + f.getPath()); System.out.println (“Ruta absoluta:“ + f.getAbsolutePath()); 2. Formas de acceso a un fichero. Clases asociadas.
  • 11. 11. LECTURAY ESCRITURA DE INFORMACIÓN En Java, el acceso a ficheros es tratado como un flujo de información entre el programa y el fichero. Un flujo no es más que un objeto que hace de intermediario entre el programa y el origen o el destino de la información. Esta abstracción proporcionada por los flujos hace que los programadores, cuando quieren acceder a información, solo se tengan que preocupar por trabajar con los objetos que proporcionan el flujo, sin importar el origen o el destino concreto de donde vengan o vayan los datos. Cualquier programa que tenga que obtener información de cualquier fuente necesita abrir un stream, igualmente si necesita enviar información abrirá un stream y se escribirá la información. La vinculación de este stream con el dispositivo físico la hace el sistema de entrada/salida de Java. 3. Flujos o Streams. Tipos.
  • 12. 11. LECTURAY ESCRITURA DE INFORMACIÓN Tenemos dos tipos de flujos: Flujos de bytes (8 bits): su uso está orientado a la lectura/escritura de datos binarios.Todas las clases de flujos de bytes descienden de las clases InputStream y OutputStream. Flujos de caracteres (16 bits): realizan operaciones de entrada y salida de caracteres. El flujo de caracteres viene gobernado por las clases Reader y Writer. 3. Flujos o Streams. Tipos.
  • 13. 11. LECTURAY ESCRITURA DE INFORMACIÓN 3.1. Flujos de bytes.
  • 14. 11. LECTURAY ESCRITURA DE INFORMACIÓN 3.2. Flujos de caracteres.
  • 15. 11. LECTURAY ESCRITURA DE INFORMACIÓN Hay dos formas de acceso a la información almacenada en un fichero: Acceso secuencial: los datos o registros se leen y se escriben en orden. Si se quiere acceder a un dato es necesario leer antes todos los anteriores. La escritura de datos se hace a partir del último dato escrito, no es posible hacer inserciones entre los datos que ya hay escritos. Acceso directo o aleatorio: permite acceder directamente a un datos o registro sin necesidad de leer los anteriores y se puede acceder a la información en cualquier orden. Los datos están almacenados en registros de tamaño conocido y nos podemos mover de un registro a otro de forma aleatoria para leerlos o modificarlos. 4. Formas de acceso a un fichero.
  • 16. 11. LECTURAY ESCRITURA DE INFORMACIÓN 4. Formas de acceso a un fichero
  • 17. 11. LECTURAY ESCRITURA DE INFORMACIÓN Operaciones básicas sobre ficheros: Creación del fichero. Apertura del fichero. Cierre del fichero Lectura de los datos del fichero Escritura de los datos en el fichero 5. Operaciones sobre ficheros.
  • 18. 11. LECTURAY ESCRITURA DE INFORMACIÓN En los ficheros secuenciales los registros se insertan en orden cronológico. Si hay que añadir nuevos registros éstos se añaden a partir del final del fichero: Consultas: .para consultar un determinado registro es necesario empezar la lectura desde el primer registro, y continuar leyendo secuencialmente hasta localizar el registro buscado. Altas: las altas se realizan al final del último registro insertado, sólo se permite añadir datos al final del fichero. Bajas: para dar de baja un registro es necesario hacer uso de un fichero auxiliar, leyendo todos los registros y copiarlos todos a excepción del que queramos dar de baja. Por último renombraremos el fichero auziliar dándole el nombre del fichero original. Modificaciones: El proceso de modificaciones es similar al de bajas. 5.1. Operaciones sobre ficheros secuenciales.
  • 19. 11. LECTURAY ESCRITURA DE INFORMACIÓN Normalmente para posicionarnos en un registro es necesario aplicar una función de conversión que usualmente tiene que ver con el tamaño del registro y con la clave del mismo.Veamos cómo se realizan las operaciones típicas: Consultas: .para consultar un determinado registro necesitamos saber su clave y aplicar la función de conversión para obtener la dirección del registro que queremos leer. Altas: para insertar un registro necesitamos saber su clave, aplicar la función de conversión a la clave para obtener la dirección y escribir el registro en la posición devuelta. Si la posición está ocupada por otro registro, el registro se insertaría en la zona de excedentes. Bajas: para realizar las bajas se suele utilizar un campo del registro a modo de switch que tenga el valor 1 cuando el registro exista y le damos el valor 0 para darle de baja. Físicamente el registro no desaparece del disco. Modificaciones: Para modificar un registro hay que localizarlo, modificar los datos que nos interesen y reescribir el registro en esa posición. 5.2. Operaciones sobre ficheros aleatorios.
  • 20. 11. LECTURAY ESCRITURA DE INFORMACIÓN Clase FileReader El flujo FileReader permite leer caracteres desde un fichero de modo secuencial. Esta clase hereda los métodos de la clase Reader. Los constructores principales son: FileReader(String ruta) FileReader(File fichero) El fichero puede abrirse con una ruta de directorios o con un objeto de tipo File. Al usar la clase FileReader se puede generar la excepción FileNotFoundException. 6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
  • 21. 11. LECTURAY ESCRITURA DE INFORMACIÓN Clase FileReader Los métodos que proporciona la clase FileReader son los siguientes:  int read(): lee un carácter y lo devuelve  int read(char[] buf): lee hasta buf.length caracteres de datos de una matriz de caracteres (buf). Los caracteres leídos se van almacenando en buf.  int read(char[] buf. Int desplazamiento, int n): lee hasta n caracteres de datos de la matriz buf comenzando por buf[desplazamiento] y devuelve el número leído de caracteres. 6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
  • 22. 11. LECTURAY ESCRITURA DE INFORMACIÓN Clase FileReader import java.io.*; public class LeerFichTexto { public static void main (String[] args) throws IOException { //declarar fichero File fichero = new File(“C:EJERCICIOSLeerFicheroTexto.java”); FileReader fic = new FileReader(fichero); //Crear el flujo de entrada int i; while ((i = fic.read()) != -1) //Se va leyendo un carácter System.out.println((char) i); fic.close(); //cerrar fichero } } 6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
  • 23. 11. LECTURAY ESCRITURA DE INFORMACIÓN FileReader no contiene métodos que nos permitan leer líneas completas, pero BufferedReader sí; dispone del método readLine() que lee una línea del fichero y la devuelve, o devuelve null si no hay nada que leer o llegamos al final del fichero. Para construir un BufferedReader necesitamos la clase FileReader: BufferedReader fichero = new BufferedReader(new FileReader(NombreFichero)); 6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
  • 24. 11. LECTURAY ESCRITURA DE INFORMACIÓN Clase FileWriter El flujo FileWriter permite escribir caracteres en un fichero de modo secuencial. Esta clase hereda los métodos necesarios para ello de la clase Writer. Los constructores principales son: FileWriter (String ruta, boolean añadir) FileWriter(File fichero) El parámetro ruta indica la localización del archivo en el sistema operativo. El parámetro añadir igual a true indica que el fichero se usa para añadir datos a un fichero ya existente. 6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
  • 25. 11. LECTURAY ESCRITURA DE INFORMACIÓN Clase FileWriter Los métodos que proporciona la clase FileWriter son:  void write(int c): escribe un carácter  void write(char[] buf): escribe un array de caracteres  void write(char[] buf, int desplazamiento, int n): escribe n caracteres de datos en la matriz buf y comenzando por buf[desplazamiento].  void write(String str): escribe una cadena de caracteres  append(char c): añade un carácter a un fichero Estos métodos también pueden lanzar la excepción IOException. 6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
  • 26. 11. LECTURAY ESCRITURA DE INFORMACIÓN La clase BufferedWriter también deriva de la clase Writer. Esta clase añade un buffer para realizar una escritura eficiente de caracteres. Para construir un BufferedWriter necesitamos un FileWriter: BufferedWriter fichero = new BufferedWriter(new FileWriter(NombreFichero)); La clase PrintWriter posee los métodos print(String) y println(String) para escribir en un fichero.Ambos reciben un String y los escriben en un fichero, el segundo método salta de línea. Para escribir un PrintWriter necesitamos la clase FileWriter: PrintWriter fichero = new PrintWriter(new FileWriter(NombreFichero)); 6.1. Clases para gestión de flujos de datos. Ficheros de Texto.
  • 27. 11. LECTURAY ESCRITURA DE INFORMACIÓN Los ficheros binarios almacenan secuencias de dígitos binarios que no son legibles directamente por el usuario como ocurría con los ficheros de texto.Tienen la ventaja de que ocupan menos espacio en el disco. En Java, las dos clases que nos permiten trabajar con ficheros binarios son FileInputStream y FileOutputStream. 6.2. Clases para gestión de flujos de datos. Ficheros binarios.
  • 28. 11. LECTURAY ESCRITURA DE INFORMACIÓN Clase FileInputStream El flujo FileInputStream permite leer bytes en un fichero de manera secuencial. Sus constructores tienen los mismos parámetros que los mostrados para FileReader. Los métodos que proporciona la clase FileInputStream son similares a los vistos para FileReader. Estos métodos devuelven el número de bytes leídos o -1 si se ha llegado al final del fichero:  int read()  int read(byte[] b)  int read(byte[] b, int desplazamiento, int n) 6.2. Clases para gestión de flujos de datos. Ficheros binarios.
  • 29. 11. LECTURAY ESCRITURA DE INFORMACIÓN Clase FileOutpuStream El flujo FileOutputStream permite escribir bytes en un fichero de manera secuencial. Sus constructores tienen los mismos parámetros que los mostrados para FileWriter: el fichero puede ser abierto vacío o listo para añadirle datos a los que ya contenga. Los métodos que proporciona la clase FileOutputStream son:  void write(int b)  void write(byte[] b)  void write(byte[] b, int desplazamiento, int n) 6.2. Clases para gestión de flujos de datos. Ficheros binarios.
  • 30. 11. LECTURAY ESCRITURA DE INFORMACIÓN Para leer y escribir datos de tipos primitivos: int, float, long,… usaremos las clases DataInputStream y DataOutputStream. Estas clases además de los métodos read() y write() proporcionan otros métodos de lectura y escritura: 6.2. Clases para gestión de flujos de datos. Ficheros binarios. MÉTODOS PARA LECTURA MÉTODOS PARA ESCRITURA boolean readBoolean(); byte readByte(); int readUnsignedByte(); int readUnsignedShort(); short readShort(); char readChar(); int readInt(); long readLong(); float readFloat(); double readDouble(); String readUTF(); void writeBoolean(boolean v); void writeByte(int v); void writeUnsignedByte(String s); void writeShort(int v); void writeChars(String s); void writeChar(int v); void writeInt(int v); void writeLong(long v); void writeFloat(float v); void writeDouble(doublé v); void writeUTF(String str);
  • 31. 11. LECTURAY ESCRITURA DE INFORMACIÓN Para abrir un objeto DataInputStream lo haremos de la siguiente forma: File fichero = new File(“nombrefichero”); FileInputStream filein = new FileInputStream(fichero); DataInputStream dataIS = new DataInputStream(filein); Para abrir un objeto DataOutputStream lo haremos de la siguiente forma: File fichero = new File(“nombrefichero”); FileOutputStream fileout = new FileOutputStream(fichero); DataOutputStream dataOS = new DataOutputStream(fileout); 6.2. Clases para gestión de flujos de datos. Ficheros binarios.
  • 32. 11. LECTURAY ESCRITURA DE INFORMACIÓN Java dispone de la clase RandomAccessFile que contiene métodos para acceder al contenido de un fichero binario de forma aleatoria y para posicionarnos en una posición concreta del mismo. Disponemos de dos posibilidades para crear el fichero de acceso aleatorio: Escribiendo el nombre del fichero: fichero = new RandomAccessFile(String nombre, String modoAcceso); Con un objeto File: fichero = new RandomAccessFile(File fich, String modoAcceso); El argumento modoAcceso puede ser “r” para solo lectura o “rw” para lectura y escritura. La clase RandomAccessFile maneja un puntero que indica la posición actual en el fichero. Cuando el fichero se crea el puntero se coloca en 0. Las sucesivas llamadas a los métodos read() y write() ajustan el puntero según la cantidad de bytes leídos o escritos. 6.3. Ficheros de acceso aleatorio.
  • 33. 11. LECTURAY ESCRITURA DE INFORMACIÓN Los métodos más importantes son: long getFilePointer(): devuelve la posición actual del puntero del fichero. void seek(long posicion): coloca el puntero del fichero en una posición determinada desde el comienzo del mismo. long length(): devuelve el tamaño del fichero en bytes. La posición length() marca el final del fichero. int skipBytes(int desplazamiento): desplaza el puntero desde la posición actual el número de bytes indicados en desplazamiento. 6.3. Ficheros de acceso aleatorio.
  • 34. 11. LECTURAY ESCRITURA DE INFORMACIÓN A continuación vamos a ver un ejemplo de un programa que escribe un fichero aleatorio con los datos de empleados, teniendo en cuenta las siguientes consideraciones: Los datos a insertar son: apellido, departamento y salario. Los datos se van introduciendo de forma secuencial, no se usará el método seek(). Por cada empleado también se insertará un identificador que coincidirá con el índice +1 con el que se recorren los arrays La longitud del registro de cada empleado es la misma (36 bytes) y los tipos que se insertan y su tamaño en bytes es el siguiente:  Identificador: es un entero, ocupa 4 bytes  Apellido: cadena de 10 caracteres. Cada carácter Unicode ocupa 2 bytes, luego el apellido ocupa 20 bytes  Departamento: es un entero, ocupa 4 bytes.  Salario: es un doublé, ocupa 8 bytes. Nota:Tamaño de otros tipos: short (2 bytes), byte (1 byte), long (8 bytes), boolean (1 bit), float (4 bytes), etc. 6.3. Ficheros de acceso aleatorio.
  • 35. 11. LECTURAY ESCRITURA DE INFORMACIÓN 6.3. Ficheros de acceso aleatorio.
  • 36. 11. LECTURAY ESCRITURA DE INFORMACIÓN 6.3. Ficheros de acceso aleatorio.
  • 37. 11. LECTURAY ESCRITURA DE INFORMACIÓN Para insertar un nuevo registro aplicamos la función de conversión al identificador para calcular la posición. El siguiente código inserta un empleado con identificador 20. Se ha de calcular la posición donde irá el registro dentro del fichero (identificador -1) * 36 bytes. 6.3. Ficheros de acceso aleatorio.
  • 38. 11. LECTURAY ESCRITURA DE INFORMACIÓN OBJETOS SERIALIZABLES Con lo visto hasta ahora, si, por ejemplo, tenemos un objeto de tipo empleado con varios atributos (nombre, dirección, salario, departamento,…) y queremos guardarlo en un fichero, tendríamos que guardar cada atributo que forma parte del objeto por separado. Java nos permite guardar objetos en ficheros binarios; para poder hacerlo, el objeto tiene que implementar la interfaz Serializable que dispone de una serie de métodos con los que podremos guardar y leer objetos en ficheros binarios. Los más importantes son:  void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException: para leer un objeto.  void writeObject(java.io.ObjecOutputStream stream) throws IOException: para escribir un objeto. Para leer y escribir objetos serializables a un stream se utilizan las clases Java ObjectInputStream y ObjectOutputStream respectivamente. 6.4. Clases para gestión de flujos de datos. Ficheros binarios. Objetos serializables.
  • 39. 11. LECTURAY ESCRITURA DE INFORMACIÓN OBJETOS SERIALIZABLES A continuación se muestra la clase Persona que implementa la interfaz Serializable y que utilizaremos para escribir y leer objetos en un fichero binario. 6.4. Clases para gestión de flujos de datos. Ficheros binarios. Objetos serializables.
  • 40. 11. LECTURAY ESCRITURA DE INFORMACIÓN OBJETOS SERIALIZABLES El siguiente ejemplo escribe objetos Persona en un fichero. Necesitamos crear un flujo de salida FileOutputStream y a continuación se crea el flujo de salida ObjectOutputStream, que es el que procesa los datos. El método writeObject() escribe los objetos al flujo de salida y los guarda en un fichero. 6.4. Clases para gestión de flujos de datos. Ficheros binarios. Objetos serializables.
  • 41. 11. LECTURAY ESCRITURA DE INFORMACIÓN OBJETOS SERIALIZABLES Para leer objetos Persona de un fichero necesitamos el flujo de entrada a disco FileInputStream y a continuación crear el flujo de entrada ObjectInputStream, que es el que procesa los datos. El método readObject() lee los objetos del flujo de entrada y puede lanzar la excepción ClassNotFoundException. 6.4. Clases para gestión de flujos de datos. Ficheros binarios. Objetos serializables.
  • 42. 11. LECTURAY ESCRITURA DE INFORMACIÓN OBJETOS SERIALIZABLES ObjectOutputStream puede darnos algunos problemas, por ejemplo, si escribimos datos en el fichero y lo cerramos. Después volvemos a abrirlo para añadir datos y entonces se escribe una nueva cabecera al final de los objetos introducidos anteriormente y después se van añadiendo el resto de los datos. Esto origina el problema que al leer el fichero se produzca la excepción StreamCorruptedException. 6.4. Clases para gestión de flujos de datos. Ficheros binarios. Objetos serializables.