Sie sind auf Seite 1von 20

Universidad

Nacional de Trujillo Ingeniera de Sistemas

Archivos de Acceso Secuencial

Curso: Tecnologa de la Programacin I.


Docente: Mg. Zoraida Yanet Vidal Melgarejo.

CLASE 09

Clase File
La clase File sirve para encapsular la interaccin de los
programas con el sistema de archivos.

Un objeto de la clase File representa el nombre de un archivo o


de una carpeta (o directorio) que puede existir en el sistema de
archivos de la computadora; por lo tanto, sus mtodos
permitirn interrogar al sistema sobre todas las caractersticas
de ese archivo o carpeta, tal como el tamao del archivo, su
tipo, su fecha de creacin, los permisos de acceso que tenemos
sobre l, etc.

2 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 1
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Clase File
Adems la clase File es la nica forma que tenemos de trabajar
con carpetas (crearlas, ver los archivos que contienen, cambiar
el nombre o borrar los archivos, etc.).

Que exista un objeto de tipo File no implica que exista el


archivo (o directorio) correspondiente en el sistema de
archivos.

Una instancia de la clase File es la representacin abstracta de


una ruta de acceso para un archivo o una carpeta.

3 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Clase File
Constructores:
public File (String ruta_completa)
Crea un objeto File a partir del nombre del archivo, ms su ruta de
acceso (relativa o absoluta).

public File (String ruta, String nombre)


Crea un objeto File a partir de una ruta (relativa o absoluta) y un
nombre de archivo separado.

public File (File ruta, String nombre)


Crea un objeto File a partir de otro que represente una ruta (relativa
o absoluta) y un nombre de archivo separado.

4 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 2
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Mtodos de la clase File


String getName(): Retorna el nombre del archivo.
String getParent(): Retorna la ruta del directorio que lo
contiene.
String getPath(): Retorna la ruta relativa del archivo.
String getAbsolutePath(): Retorna la ruta absoluta del archivo.
boolean canRead(): true si puede ser ledo.
boolean canWrite(): true si no est marcado como slo lectura.
boolean exists(): true si existe en el sistema de archivos.
boolean isDirectory(): true si es un directorio.
boolean isHidden(): true si es un archivo o carpeta oculto.
long length(): Devuelve el tamao del archivo (en bytes). Si es
una carpeta el valor devuelto es cero.
5 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Mtodos de la clase File


boolean createTempFile(): Crea un archivo vaco especificado
por los argumentos pasados, en la carpeta temporal del sistema.
boolean delete(): Elimina un archivo o un directorio vaco.
String[] list(): Lista los nombres de los archivos y carpetas que
hay en la carpeta especificada por el objeto File.
boolean mkdir(): Crear un directorio.
boolean mkdirs(): Crear un conjunto de directorios.
boolean renameTo(File dest): Permite renombrar un archivo.
boolean setReadOnly(): Marca un archivo como slo lectura.
String toString(): Devuelve la ruta especificada cuando se cre
el objeto File.

6 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 3
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Los streams (flujos)


Un archivo o fichero es una coleccin de datos que se almacena
en un soporte fsico (por ejemplo un disco duro o un CD) para
poderlos manipular en cualquier momento.

Estos datos se almacenan como una coleccin de registros,


conteniendo todos ellos, generalmente, los mismos campos.

Cada campo almacena un valor de un tipo predefinido o


definido por el usuario. El registro ms simple estara formado
por un carcter.

7 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Los streams (flujos)


Por ejemplo, si se quisiera almacenar en un archivo los datos
relativos a una persona, podra disearse cada registro con los
datos: nmero de DNI, nombre, apellidos y fecha de nacimiento.
Desde un punto de vista grfico, puede representarse la
estructura de un archivo de la siguiente manera:

campo
registro registro
archivo

8 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 4
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Los streams (flujos)


Cada campo almacenar el dato correspondiente. El conjunto
de campos forma un registro, y el conjunto de todos los
registros forman un archivo.

Para manipular un archivo que se identifica por un nombre, son


tres las operaciones a realizar: abrir el archivo, escribir o leer
registros del archivo y cerrar el archivo.

Java ofrece dos tipos diferentes de acceso a un archivo de datos:


secuencial y aleatorio.

9 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Los streams (flujos)


Java define la entrada/salida en trminos de streams o flujos de
informacin. Es decir, cualquier programa realizado en Java que
necesite llevar a cabo una operacin de I/O lo har a travs de
un stream.

Un stream es una secuencia ordenada de datos.

La comunicacin entre un programa y el origen o destino de


cierta informacin, se realiza mediante un stream que no es ms
que un objeto que hace de intermediario entre el programa y el
origen o destino de la informacin. De esta forma, el programa
leer o escribir en el stream sin importarle desde dnde viene
la informacin o adnde va.
10 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 5
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Los streams (flujos)


El programa lee datos

Archivo stream read Programa

El programa escribe datos

Programa write stream Archivo

Este nivel de abstraccin hace que un programa no tenga que


saber nada del dispositivo, lo que se traduce en una facilidad
ms a la hora de escribir programas.

11 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Los streams (flujos)


La biblioteca estndar de Java, en su paquete java.io, define una
coleccin que clases que soportan los algoritmos para leer y
escribir.
Object

InputStream Reader

SubClases SubClases

OutputStream Writer

SubClases SubClases

12 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 6
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Archivos de acceso secuencial


El tipo de acceso ms simple a un archivo de datos es el
secuencial.

Un archivo abierto para acceso secuencial es un archivo que


puede almacenar registros de cualquier longitud, incluso de un
solo byte. Cuando la informacin se escribe registro a registro,
stos son colocados uno a continuacin de otro, y cuando se
lee, se empieza por el primer registro y se contina al siguiente
hasta alcanzar el final.

Este tipo de acceso generalmente se utiliza con archivos de


texto en los que se escribe toda la informacin desde el
principio hasta el final y se lee de la misma forma.
13 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Archivos de acceso secuencial


Sin embargo, los archivos de texto no son los ms apropiados
para almacenar grandes series de nmeros, porque cada
nmeros es almacenado como una secuencia de bytes; esto
significa que un nmero entero de nueve dgitos ocupa nueve
bytes en lugar de los cuatro requeridos para un entero.

Java proporciona clases para trabajar con distintos flujos: de


bytes y de caracteres para el tratamiento de texto, y de datos
para el tratamiento de nmeros.

14 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 7
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Byte streams (Flujos de bytes)


Su uso est orientado a la lectura y escritura de datos binarios.

El tratamiento del flujo de bytes viene gobernado por dos


clases abstractas: InputStream y OutputStream.

Cada una de estas clases abstractas tienen varias subclases


concretas que controlan las diferencias entre distintos
dispositivos de I/O que se pueden utilizar. As mismo, estas dos
clases son las que definen los mtodos que sus subclases
tendrn implementados y, de entre todas, destacan los mtodos
read() y write() que leen y escriben bytes de datos
respectivamente.

15 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Byte stream: InputStream

16 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 8
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Byte stream: OutputStream

17 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Byte stream: FileOutputStream


Permite escribir bytes a un archivo. Adems de los mtodos que
hereda de la clase OutputStream, la clase proporciona los
siguientes constructores:
FileOutputStream (String nombre)
FileOutputStream (String nombre, boolean aadir)
FileOutputStream (File archivo)

El primer constructor abre un flujo de salida hacia el archivo


especificado por nombre, el segundo hace lo mismo pero con la
posibilidad de aadir datos a un fichero existente (aadir =
true), y el tercero lo hace a partir de un objeto File.

18 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 9
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Byte stream: FileInputStream


Permite leer bytes desde un archivo. Adems de los mtodos
que hereda de la clase InputStream, la clase proporciona los
siguientes constructores:
FileInputStream (String nombre)
FileInputStream (File archivo)

El primer constructor abre un flujo de entrada desde el archivo


especificado por nombre, y el segundo lo hace a partir de un
objeto File.

19 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Character streams (Flujos de caracteres)


Proporciona un medio conveniente para el manejo de entradas y
salidas de caracteres.

Al utilizar la codificacin Unicode, se puede internacionalizar.

El tratamiento del flujo de caracteres viene gobernado por dos


clases abstractas: Reader y Writer.

Cada una de estas clases abstractas tienen varias subclases


concretas que implementan los mtodos definidos en ellas
siendo los ms destacados los mtodos read() y write() que leen
y escriben caracteres de datos respectivamente.

20 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 10
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Character stream: Reader

21 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Character stream: Writer

22 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 11
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Character stream: FileWriter


Permite escribir caracteres (char) a un archivo. Adems de los
mtodos que hereda de la clase Writer, la clase proporciona
los siguientes constructores:
FileWriter (String nombre)
FileWriter (String nombre, boolean aadir)
FileWriter (File archivo)

El primer constructor abre un flujo de salida hacia el archivo


especificado por nombre, el segundo hace lo mismo con la
posibilidad de aadir datos y el tercero lo hace a partir de un
objeto File.

23 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Character stream: FileReader


Permite leer caracteres desde un archivo. Adems de los
mtodos que hereda de la clase Reader, la clase proporciona
los siguientes constructores:
FileReader (String nombre)
FileReader (File archivo)

El primer constructor abre un flujo de entrada desde el archivo


especificado por nombre, y el segundo lo hace a partir de un
objeto File.

24 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 12
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Data streams (Flujos de datos)


Permiten leer y escribir datos de tipos primitivos desde y hacia
un archivo.

El paquete java.io proporciona las clases DataInputStream y


DataOutputStream, que permiten leer y escribir,
respectivamente, datos de cualquier tipo primitivo.

Sin embargo, no pueden utilizarse con los dispositivos ASCII de


E/S estndar: un flujo DataInputStream slo puede leer
datos almacenados en un archivo mediante un flujo
DataOutputStream.

25 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Data stream: InputStream

26 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 13
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Data stream: OutputStream

27 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Data stream: DataOutputStream


Deriva indirectamente de OutputStream y permite escribir
en un flujo de salida subordinado, datos de cualquier tipo
primitivo.

Todos los mtodos proporcionados por esta clase estn


definidos en la interfaz DataOutput implementada por la
misma.

Las siguientes lneas de cdigo definen un filtro que permitir


escribir datos de tipos primitivos en un archivo datos.txt.
FileOutputStream flujo = new FileOutputStream(datos.txt);
DataOutputStream filtro = new DataOutputStream(flujo);
28 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 14
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Data stream: DataOutputStream


Los mtodos ms utilizados de esta clase son:
writeBoolean(): Escribe un valor de tipo boolean.
writeByte(): Escribe un valor de tipo byte.
writeBytes(): Escribe un String como una secuencia de bytes.
writeChar(): Escribe un valor de tipo char.
writeChars(): Escribe un String como una secuencia de
caracteres.
writeShort(): Escribe un valor de tipo short.

29 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Data stream: DataOutputStream


writeInt(): Escribe un valor de tipo int.
writeLong(): Escribe un valor de tipo long.
writeFloat(): Escribe un valor de tipo float.
writeDouble(): Escribe una valor de tipo double.
writeUTF(): Escribe una cadena de caracteres en formato
UTF-8; los dos primeros bytes especifican el nmero de bytes
de datos que sern escritos.

30 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 15
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Data stream: DataInputStream


Deriva indirectamente de InputStream y permite leer de un
flujo de entrada subordinado, datos de cualquier tipo primitivo
escritos por un flujo de la clase DataOutputStream.

Todos los mtodos proporcionados por esta clase estn


definidos en la interfaz DataInput implementada por la misma.

Las siguientes lneas de cdigo definen un filtro que permitir


leer datos de tipos primitivos desde el archivo datos.txt.
FileInputStream flujo = new FileInputStream(datos.txt);
DataInputStream filtro = new DataInputStream(flujo);

31 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Data stream: DataInputStream


Los mtodos ms utilizados de esta clase son:
readBoolean(): Devuelve un valor de tipo boolean.
readByte(): Devuelve un valor de tipo byte.
readChar(): Devuelve un valor de tipo char.
readShort(): Devuelve un valor de tipo short.
readInt(): Devuelve un valor de tipo int.
readLong(): Devuelve un valor de tipo long.
readFloat(): Devuelve un valor de tipo float.
readDouble(): Devuelve una valor de tipo double.
readUTF(): Devuelve una cadena de caracteres en formato
UTF-8; los dos primeros bytes especifican el nmero de bytes
de datos que sern ledos.
32 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 16
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Data streams

DataOutputStream

Programa write filtro flujo Archivo

DataInputStream

Programa filtro flujo read Archivo

33 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Object Stream: Flujo de Objetos


Serializacin de objetos.

Para que un objeto pueda ser almacenado en disco, es


necesario que la clase a la que pertenece sea serializable. Esta
caracterstica la poseen todas aquellas clases que implementen
la interfaz java.io.Serializable

La interfaz Serializable no contiene ningn mtodo, basta con


que una clase la implemente para que sus objetos puedan ser
serializados por la maquina virtual y por lo tanto almacenarlos
en disco.

34 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 17
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Object Stream: Flujo de Objetos


El siguiente listado corresponde a una clase Persona. Estos
objetos podrn ser transferidos a disco pues Persona
implementa la interfaz Serializable.

import java.io.Serializable;

public class Persona implements Serializable{


private String nombre;
private String edad;

public Persona(String nombre, int edad) {


this.nombre = nombre;
this.edad = edad;
}

// Mtodos set y get


}

35 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Escritura de objetos en un archivo


La escritura de objetos en disco se realiza a travs del
ObjectOutputStream. Para crear un objeto de esta clase es
necesario disponer del FileOutputStream asociado al archivo
donde se va a realizar la escritura.

Una vez creado el objeto, la clase dispone del mtodo


writeObject(Object obj) para realizar la escritura del objeto en
el disco.

El siguiente programa almacena en un archivo de disco varios


objetos de la clase Persona definida anteriormente.

36 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 18
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Escritura de objetos en un archivo


import java.io.*;

public class EscribeArchivoPersonas {


public static void main(String arg[]) throws IOException {
FileOutputStream fs= new FileOutputStream(datos.obj);
ObjectOutputStream os = new ObjectOutputStream(fs);

os.writeObject(new Persona(Fidel,11));
os.writeObject(new Persona(Hilda,17));
os.writeObject(new Persona(Carlos,45));
os.writeObject(new Persona(Jorge,48));
os.close(); // cierra el stream
}
}

37 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Lectura de objetos en un archivo


Para leer los objetos de un archivo que han sido almacenados
mediante ObjectOutputStream, se deber utilizar un objeto
ObjectInputStream.

La clase ObjectInputStream dispone de un mtodo


readObject() para devolver los objetos almacenados en el
archivo. El constructor de esta clase requiere un objeto
FileInputStream asociado al archivo de donde se leer el objeto.

El siguiente programa recupera los objetos de tipo Persona


almacenados en el archivo datos.obj por la clase del ejemplo
anterior y muestra sus datos en la pantalla.

38 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 19
Universidad
Nacional de Trujillo Ingeniera de Sistemas

Lectura de objetos desde un archivo


import java.io.*;

public class LeeArchivoPersonas {


public static void main (String [] args) throws IOException,
NotSerializableException, ClassNotFoundException {
FileInputStream fs = new FileInputStream ("datos.obj");
ObjectInputStream os = new ObjectInputStream (fs);
boolean masregistros=true;
while(masregistros==true) {
try {
Persona p = (Persona) os.readObject ();
System.out.println(p.getNombre()+, +p.getEdad());
} catch(Exception ex) {
masregistros=false;
}
}
}
}
39 Docente: Mg. Zoraida Yanet Vidal Melgarejo

Curso: Tecnologa de la Programacin I Tema: Archivos de Acceso Secuencial


Docente: Mg. Zoraida Yanet Vidal Melgarejo Pg. 20