You are on page 1of 17

31/10/2012

Archivos de Acceso Secuencial

Curso: Tecnología de la Programación I.


Docente: Mg. Zoraida Yanet Vidal Melgarejo.

CLASE 12

Clase File
 La clase File sirve para encapsular la interacción 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 métodos
permitirán interrogar al sistema sobre todas las características
de ese archivo o carpeta, tal como el tamaño del archivo, su
tipo, su fecha de creación, los permisos de acceso que tenemos
sobre él, etc.

1
31/10/2012

Clase File
 Además 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 representación abstracta de


una ruta de acceso para un archivo o una carpeta.

Clase File
 Constructores:
 public File (String ruta_completa)
Crea un objeto File a partir del nombre del archivo, más 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.

2
31/10/2012

Métodos 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 leído.
 boolean canWrite(): true si no está marcado como sólo 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 tamaño del archivo (en bytes). Si es
una carpeta el valor devuelto es cero.
5

Métodos de la clase File


 boolean createTempFile(): Crea un archivo vacío especificado
por los argumentos pasados, en la carpeta temporal del sistema.
 boolean delete(): Elimina un archivo o un directorio vacío.
 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 sólo lectura.
 String toString(): Devuelve la ruta especificada cuando se creó
el objeto File.

3
31/10/2012

Los streams (flujos)


 Un archivo o fichero es una colección de datos que se almacena
en un soporte físico (por ejemplo un disco duro o un CD) para
poderlos manipular en cualquier momento.

 Estos datos se almacenan como una colección 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 más simple estaría formado
por un carácter.

Los streams (flujos)


 Por ejemplo, si se quisiera almacenar en un archivo los datos
relativos a una persona, podría diseñarse cada registro con los
datos: número de DNI, nombre, apellidos y fecha de nacimiento.
Desde un punto de vista gráfico, puede representarse la
estructura de un archivo de la siguiente manera:

nombre apellidos fechaNac

campo
registro registro
archivo

4
31/10/2012

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.

Los streams (flujos)


 Java define la entrada/salida en términos de streams o flujos de
información. Es decir, cualquier programa realizado en Java que
necesite llevar a cabo una operación de I/O lo hará a través de
un stream.

 Un stream es una secuencia ordenada de datos.

 La comunicación entre un programa y el origen o destino de


cierta información, se realiza mediante un stream que no es más
que un objeto que hace de intermediario entre el programa y el
origen o destino de la información. De esta forma, el programa
leerá o escribirá en el stream sin importarle desde dónde viene
la información o adónde va.
10

5
31/10/2012

Los streams (flujos)


El programa lee datos

Archivo stream read Programa

El programa escribe datos

Programa write stream Archivo

 Este nivel de abstracción hace que un programa no tenga que


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

11

Los streams (flujos)


 La biblioteca estándar de Java, en su paquete java.io, define una
colección que clases que soportan los algoritmos para leer y
escribir.
Object

InputStream Reader

SubClases SubClases

OutputStream Writer

SubClases SubClases

12

6
31/10/2012

Archivos de acceso secuencial


 El tipo de acceso más 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 información se escribe registro a registro,
éstos son colocados uno a continuación de otro, y cuando se
lee, se empieza por el primer registro y se continúa al siguiente
hasta alcanzar el final.

 Este tipo de acceso generalmente se utiliza con archivos de


texto en los que se escribe toda la información desde el
principio hasta el final y se lee de la misma forma.
13

Archivos de acceso secuencial


 Sin embargo, los archivos de texto no son los más apropiados
para almacenar grandes series de números, porque cada
números es almacenado como una secuencia de bytes; esto
significa que un número entero de nueve dígitos 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 números.

14

7
31/10/2012

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 métodos que sus subclases
tendrán implementados y, de entre todas, destacan los métodos
read() y write() que leen y escriben bytes de datos
respectivamente.

15

Byte stream: InputStream

16

8
31/10/2012

Byte stream: OutputStream

17

Byte stream: FileOutputStream


 Permite escribir bytes a un archivo. Además de los métodos que
hereda de la clase OutputStream, la clase proporciona los
siguientes constructores:
 FileOutputStream (String nombre)
 FileOutputStream (String nombre, boolean añadir)
 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 añadir datos a un fichero existente (añadir =
true), y el tercero lo hace a partir de un objeto File.

18

9
31/10/2012

Byte stream: FileInputStream


 Permite leer bytes desde un archivo. Además de los métodos
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

Character streams (Flujos de caracteres)


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

 Al utilizar la codificación 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 métodos definidos en ellas
siendo los más destacados los métodos read() y write() que leen
y escriben caracteres de datos respectivamente.
20

10
31/10/2012

Character stream: Reader

21

Character stream: Writer

22

11
31/10/2012

Character stream: FileWriter


 Permite escribir caracteres (char) a un archivo. Además de los
métodos que hereda de la clase Writer, la clase proporciona
los siguientes constructores:
 FileWriter (String nombre)
 FileWriter (String nombre, boolean añadir)
 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 añadir datos y el tercero lo hace a partir de un
objeto File.

23

Character stream: FileReader


 Permite leer caracteres desde un archivo. Además de los
métodos 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

12
31/10/2012

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 estándar: un flujo DataInputStream sólo puede leer
datos almacenados en un archivo mediante un flujo
DataOutputStream.

25

Data stream: InputStream

26

13
31/10/2012

Data stream: OutputStream

27

Data stream: DataOutputStream


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

 Todos los métodos proporcionados por esta clase están


definidos en la interfaz DataOutput implementada por la
misma.

 Las siguientes líneas de código 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

14
31/10/2012

Data stream: DataOutputStream


Los métodos más 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

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 número de bytes
de datos que serán escritos.

30

15
31/10/2012

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 métodos proporcionados por esta clase están


definidos en la interfaz DataInput implementada por la misma.

 Las siguientes líneas de código 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

Data stream: DataInputStream


Los métodos más 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 número de bytes
de datos que serán leídos.
32

16
31/10/2012

Data streams

DataOutputStream

Programa write filtro flujo Archivo

DataInputStream

Programa filtro flujo read Archivo

33

17

You might also like