Tema 6. Programación Orientada A Objetos

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

6.1.

Definición

Un archivo es una colección de datos guardados en un dispositivo de almacenamiento permanente.


Aunque C# ve a los archivos como un flujo de bytes, es conveniente concebirlos como un conjunto de
registros que poseen una marca de fin de archivo.

La información de un archivo se organiza en registros, los registros en campos, los campos en bytes, y los
bytes en bits.

Flujos de E/S

Para que un programa pueda manejar un archivo en un dispositivo de almacenamiento permanente, por
ejemplo un disco, primero debe crearse un flujo. Un flujo es un conducto a través del cual se
transportarán los datos hacia o desde el dispositivo de almacenamiento. Los datos fluirán entre la
memoria RAM de la computadora y el dispositivo de almacenamiento.

Si los datos van a enviarse desde la memoria hacia el disco, se trata de un flujo de salida (Output, en
Inglés); si los datos van a enviarse desde el disco hacia la memoria , el flujo es de entrada (Input, en
Inglés).

A las operaciones de entrada se les conoce como de lectura (Read, en Inglés) y a las de salida se les
conoce como de escritura (Write, en Inglés).

6.2. Clasificación

Dependiendo del tipo de datos que manejan en sus registros, los archivos se clasifican en archivos de
texto y archivos binarios.

 Archivos de texto: Los datos en los archivos de texto se graban como secuencias de bytes. Por
ejemplo, el dato 123456 se graba como una secuencia de 6 bytes y no como un entero, por lo
que no pueden realizarse operaciones matemáticas con él.

El manejo de archivos de texto se puede llevar a cabo por medio de dos tipos de flujos: de bytes
y de caracteres.

 Archivos binarios: Cuando se requiere efectuar operaciones con datos de alguno de los tipos
primitivos (bool, byte, double, float, int, long, short, etc.), tales datos deberán escribirse y leerse
en formato binario.

Tema 6. Flujos y archivos


1/6
Ing. Salvador Márquez
6.3. Operaciones básicas y tipos de acceso

Métodos de entrada y de salida

Normalmente, cuando se codifica un programa, se hace con la intención de que ese programa pueda
interactuar con los usuarios del mismo, es decir, que el usuario pueda pedir que realice cosas y
suministrar datos con los que se quiere que haga algo. Una vez introducidos los datos y las órdenes, se
espera que el programa manipule de alguna forma esos datos para proporcionarnos una respuesta a lo
solicitado.

En muchas ocasiones interesa que el programa guarde los datos que se le han introducido, de forma que
si el programa termina los datos no se pierdan y puedan ser recuperados en una sesión posterior. La
forma más normal de hacer esto es mediante la utilización de ficheros que se guardarán en un
dispositivo de memoria no volátil (normalmente un disco).

A todas las operaciones, que constituyen un flujo de información del programa con el exterior, se les
conoce como Entrada/Salida (E/S).

Existen dos tipos de E/S:

 E/S estándar: Se realiza con la terminal del usuario.


 E/S a través de fichero: Se trabaja con ficheros de disco.

Todas las operaciones de E/S en Java vienen proporcionadas por el paquete estándar de la API de Java
denominado java.io que incorpora interfaces, clases y excepciones para acceder a todo tipo de ficheros.

Entrada/Salida estándar

Entrada/salida que se comunica con el usuario a través de la pantalla o de la ventana del terminal. Si
creamos una applet no se utilizarán normalmente estas funciones, ya que su resultado se mostrará en la
ventana del terminal y no en la ventana de la applet. La ventana de la applet es una ventana gráfica y
para poder realizar una entrada o salida a través de ella será necesario utilizar el AWT.

El acceso a la entrada y salida estándar es controlado por tres objetos que se crean automáticamente al
iniciar la aplicación:

a) System.in

Este objeto implementa la entrada estándar (normalmente el teclado), los métodos que nos
proporciona para controlar la entrada son:

Tema 6. Flujos y archivos


2/6
Ing. Salvador Márquez
 read(): Devuelve el carácter que se ha introducido por el teclado leyéndolo del buffer de
entrada y lo elimina del para que en la siguiente lectura sea leído el siguiente carácter. Si
no se ha introducido ningún carácter por el teclado devuelve el valor -1.

 skip(n): Ignora los n caracteres siguientes de entrada.

b) System.out

Este objeto implementa la salida estándar. Los métodos que nos proporciona para controlar la
salida son:

 print(a): Imprime a en la salida, donde a puede ser cualquier tipo básico Java ya que Java
hace su conversión automática a cadena.

 println(a): Es idéntico a print(a) salvo que con println() se imprime un salto de línea al
final de la impresión de a.

c) System.err

Este objeto implementa la salida en caso de error. Normalmente esta salida es la pantalla o la
ventana del terminal como con System.out, pero puede ser interesante redirigirlo, por ejemplo
hacia un fichero, para diferenciar claramente ambos tipos de salidas.(Sistemas Operativos II
(S/F))

Ejemplo

A continuación vemos un ejemplo del uso de estas funciones que acepta texto hasta que se pulsa el
retorno de carro e informa del número de caracteres introducidos.
import java.io.*;

class CuentaCaracteres {
public static void main(String args[]) throws IOException {
int contador=0;
while(System.in.read()!='\n')
contador++;
System.out.println(); // Retorno de carro "gratuito"
System.out.println("Tecleados "+contador+" caracteres.");

Tema 6. Flujos y archivos


3/6
Ing. Salvador Márquez
Entrada/Salida por fichero

Tipos de ficheros

En Java es posible utilizar dos tipos de ficheros (texto y binarios) y dos tipos de acceso a los ficheros
(secuencial o aleatorio).

Ficheros

• Texto: Están compuestos de caracteres legibles


• Binarios: Almacenan cualquier tipo de datos (int, float, boolean).

Los ficheros de texto están compuestos de caracteres legibles, mientras que los binarios pueden
almacenar cualquier tipo de datos (int, float, boolean,...).

Acceso a ficheros

• Una lectura secuencial implica tener que acceder a un elemento antes de acceder al siguiente, es
decir, de una manera lineal (sin saltos).

• Los ficheros de acceso aleatorio permiten acceder a datos de una forma aleatoria, esto es
indicando una determinada posición.

El siguiente ejemplo crea el fichero de texto "/carta.txt" a partir de un texto que se le introduce por
teclado: import java.io.*; class CreaCarta {
public static void main(String args[]) throws IOException{
int c;
FileOutputStream f=new FileOutputStream("/carta.txt");
while( ( c=System.in.read() ) != -1 )
f.write( (char)c );
f.close();
}
}
La clase FileInputStream

Mediante los objetos de esta clase leemos de ficheros de texto de forma secuencial.

Presenta el método read() para la lectura del fichero. Este método se puede invocar de varias formas.

• int read(): Devuelve el siguiente carácter del fichero.

Tema 6. Flujos y archivos


4/6
Ing. Salvador Márquez
• int read( byte a[] ): Llena el vector a con los caracteres leídos del fichero. Devuelve la longitud del
vector que se ha llenado si se realizó con éxito o –1 si no había suficientes caracteres en el
fichero para llenar el vector.

• int read( byte a[], int off, int len ): Lee len caracteres del fichero, insertándolos en el vector a.

import java.io.*;
class MuestraCarta {
public static void main(String args[]) throws IOException {
int c;
FileInputStream f=new FileInputStream("/carta.txt");
while( ( c=f.read() ) != -1 )
System.out.print( (char)c );
f.close();
}

6.4. Manejo de objetos persistentes

Mediante los objetos se utilizan ficheros binarios mediante un acceso aleatorio, tanto para lectura como
para escritura. En estos ficheros hay un índice que nos dice en qué posición del fichero nos encontramos,
y con el que se puede trabajar para posicionarse en el fichero. Cuenta con una serie de funciones para
realizar el desplazamiento del puntero del fichero. Hay que tener en cuenta que cualquier lectura o
escritura de datos se realizará a partir de la posición actual del puntero del fichero.

La escritura del fichero se realiza con una función que depende el tipo de datos que se desee escribir:

 void write( byte b[], int ini, int len ); Escribe los caracteres del vector b.
 void write( int i ); Escribe la parte baja de i (un byte) en el flujo.
 void writeBoolean( boolean b ); Escribe el boolean b como un byte.
 void writeByte( int i ); Escribe i como un byte.
 void writeBytes( String s ); Escribe la cadena s tratada como bytes, no caracteres.
 void writeChar( int i ); Escribe i como 1 byte.
 void writeChars( String s ); Escribe la cadena s.
 void writeDouble( double d ); Convierte d a long y le escribe como 8 bytes.
 void writeFloat( float f ); Convierte f a entero y le escribe como 4 bytes.
 void writeInt( int i ); Escribe i como 4 bytes.
 void writeLong( long v ); Escribe v como 8 bytes.
 void writeShort( int i ); Escribe i como 2 bytes.
 void writeUTF( String s ); Escribe la cadena s utilizando la codificación UTF-8.

Tema 6. Flujos y archivos


5/6
Ing. Salvador Márquez
La lectura del fichero se realiza con una función que depende del tipo de datos que queremos leer.

 boolean readBoolean(); Lee un byte y devuelve false si vale 0 o true sino.


 byte readByte(); Lee y devuelve un byte.
 char readChar(); Lee y devuelve un caracter.
 double readDouble(); Lee 8 bytes, y devuelve un double.
 float readFloat(); Lee 4 bytes, y devuelve un float.
 void readFully( byte b[] ); Lee bytes del fichero y los almacena en un vector b.
 void readFully( byte b[], int ini, int len ); Lee len bytes del fichero y los almacena en un vector b.
 int readInt(); Lee 4 bytes, y devuelve un int.
 long readLong(); Lee 8 bytes, y devuelve un long.
 short readShort(); Lee 2 bytes, y devuelve un short.
 int readUnsignedByte(); Lee 1 byte, y devuelve un valor de 0 a 255.
 int readUnsignedShort(); Lee 2 bytes, y devuelve un valor de 0 a 65535.
 String readUTF(); Lee una cadena codificada con el formato UTF-8.
 int skipBytes(int n); Salta n bytes del fichero. Si no es posible la lectura devuelven –1

Referencias:

Tutorial de Programación Multiplataforma (2014) Flujos y Archivos. Consultado el 24 de julio de


2014 en http://itslr.edu.mx/archivos2013/TPM/temas/s2u6.html

Sistemas Operativos II (s/f) Métodos de Entrada y de Salida. Consultado el 24 de julio en


http://mileidyjnp.bligoo.cl/metodos-de-entrada-y-salida

Tema 6. Flujos y archivos


6/6
Ing. Salvador Márquez

También podría gustarte