Академический Документы
Профессиональный Документы
Культура Документы
class CuentaCaracteres {
A. Introducción
Normalmente, en muchas ocasiones interesa que el public static void main(String args[]) throws IOException
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 int cont=0;
forma más normal de hacer esto es mediante la utilización while(System.in.read()!='\n') cont++;
de archivos que se guardarán en un dispositivo de
memoria no volátil (normalmente un disco). System.out.println(); // Retorno de carro "gratuito"
Existen dos tipos de Entrada/Salida (E/S): la estándar a System.out.println("Tecleados ” +cont+" caracts.");
través de teclado y la E/S a través de archivos en disco. }
}
Todas las operaciones de E/S en Java vienen en el
paquete estándar de la API Java denominado java.io que C. Entrada/Salida por archivo
incorpora interfaces, clases y excepciones para acceder a a.) Tipos de archivos
todo tipo de archivos. En Java se utilizan dos tipos (de texto o binarios) y dos
tipos de acceso a los archivos (secuencial o aleatorio).
B. Entrada/Salida estándar Los archivos de texto están compuestos de caracteres.
Si creamos una applet no se utilizarán estas funciones, ya Los binarios almacenan cualquier tipo de datos ( int, float,
que su resultado se mostrará en la ventana modo terminal boolean,...).
o consola, y no en la ventana de la applet. La ventana de Una lectura secuencial acceder a un elemento antes de
la applet es una ventana gráfica y para poder realizar una acceder al siguiente (sin saltos). Un archivo de acceso
entrada o salida a través de ella será necesario utilizar el aleatorio permite acceder a sus datos, indicando una
AWT o SWING. determinada posición desde la cual leer/escribir.
La entrada y salida estándar es controlada por tres b.) Clases del paquete java.io para tratar archivos.
objetos que se crean automáticamente al iniciar la Sólo vamos a trata las tres principales:
aplicación: System.in, System.out y System.err FileOutputStream: Archivo de salida de texto. Se
a.) System.in accede de forma secuencial.
Entrada normalmente el teclado. Los métodos para FileInputStream: Archivo de entrada de texto. Se
controlar la entrada son: accede de forma secuencial.
read(): Devuelve el carácter escrito por teclado RandomAccessFile: Archivos de entrada o salida
leyéndolo del buffer de entrada y lo elimina del buffer binario con acceso aleatorio. Permiten multitud de
para la siguiente lectura de otro carácter. Si no se operaciones; saltar hacia delante y hacia atrás
escribe ningún carácter devuelve -1. para leer la información que necesitemos en cada
skip(n): Ignora n caracteres siguientes leidos. momento, e incluso leer o escribir partes del
b.) System.out archivo sin necesidad de cerrarlo y volverlo a
Salida estándar. para controlar la salida son: abrir en un modo distinto.
print(a): Imprime a en la salida, a puede ser cualquier
tipo de dato; Java le hace su conversión automática a c.) Generalidades
cadena.
println(a): se imprime salto de línea al final. 1. Abrir el archivo.
c.) System.err Se crear un objeto de la clase correspondiente y el tipo
Salida en caso de error. Normalmente es la pantalla o la de acceso que vamos a utilizar:
consola como con System.out. puede redirigirse hacia un TipoDeArchivo obj = new TipoDeArchivo( Ruta );
archivo. Las funciones son idénticas a las de System.out. Ruta: donde esta el archivo o un descriptor válido.
d.) Ejemplo
Ejemplo: aceptar texto hasta pulsar el retorno de carro e Para los objetos RandomAccessFile (acceso aleatorio), se
informa del número de caracteres introducidos. ha de instanciar de la siguiente forma:
RandomAccessFile obj = new RandomAccessFile( ruta,
import java.io.*; modo );
modo:; "r" para lectura / "rw" para lectura y escritura. int read ( byte a[], int off, int len ): Lee len
caracteres, insertándolos en el vector a.
3. Gestión de excepciones. Todos ellos devuelven -1 si llegamos hasta el final del
Los métodos que utilicen clases de este paquete deben archivo (momento para cerrarlo).
tener en su definición una cláusula throws IOException.
pueden lanzar excepciones de esta clase (o sus hijas) en Ejemplo mostrar el archivo "/carta.txt" en pantalla:
su ejecución, que deben de ser capturadas y
debidamente gestionadas. import java.io.*;
4. Se cierra el archivo y se destruye el objeto. class MuestraCarta
Esto se puede realizar de dos formas, dejando que sea el {
recolector de basura de Java el que lo destruya cuando public static void main(String args[]) throws IOException
no lo necesite (no se recomienda) o destruyendo el objeto {
explícitamente mediante un close() del objeto: obj.close()
int c;
d.) La clase FileOutputStream FileInputStream f=new FileInputStream("/carta.txt");
Escribimos en archivos de texto de forma secuencial.
Presenta el método write() para la escritura: while( ( c=f.read() ) != -1 )
Métodos de lectura segun del tipo de datos: static void imprimeEltoN(String ruta, long cual)
boolean readBoolean(); Lee un byte y devuelve throws IOException{
false si vale 0 o true sino.
byte readByte(); Lee y devuelve un byte. RandomAccessFile f=new RandomAccessFile(ruta,"r"); //
char readChar(); Lee y devuelve un caracter. E/
double readDouble(); Lee 8 bytes, y devuelve un System.out.print( "El archivo " + ruta );
double. System.out.println( " ocupa " + f.length() + " bytes." );
float readFloat(); Lee 4 bytes, y devuelve un float. f.seek( cual-1 ); // Me posiciono (-1 porque empieza en
void readFully( byte b[] ); Lee bytes del archivo y 0)
los almacena en un vector b.
void readFully( byte b[], int ini, int len ); Lee len System.out.print(" En la posicion " + f.getFilePointer() );
bytes del archivo y los almacena en un vector b. System.out.println(" esta el numero " + f.readByte() );
int readInt(); Lee 4 bytes, y devuelve un int.
long readLong(); Lee 8 bytes, y devuelve un long. f.skipBytes( 9 ); // Salto 9 => Elemento 10 mas alla
System.out.print(" 10 elementos más allá, esta el ");
short readShort(); Lee 2 bytes, y devuelve un
System.out.println( f.readByte() );
short.
f.close();
int readUnsignedByte(); Lee 1 byte, y devuelve un
}
valor de 0 a 255.
int readUnsignedShort(); Lee 2 bytes, y devuelve Si incluimos ambos métodos en una clase, y les llamamos
un valor de 0 a 65535. con el siguiente programa principal ( main()):
String readUTF(); Lee una cadena codificada con public static void main(String args[]) throws IOException {
el formato UTF-8. String ruta="numeros.dat"; // Archivo
int skipBytes(int n); Salta n bytes del archivo. creaFichBin( ruta ); // Se crea
Si no es posible la lectura devuelven –1. imprimeEltoN( ruta, 14 ); // Accedo al elemento 14.
Ejemplo }
crear y acceder a un archivo binario, acceso aleatorio,
que contiene los 100 primeros números (en orden): Obtendremos la siguiente salida:
El archivo numeros.dat ocupa 100 bytes.
static void creaFichBin( String ruta ) throws IOException { En la posicion 13 esta el numero 14
10 elementos más allá, esta el 24
http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/III_3.htm