Vous êtes sur la page 1sur 22

Curso de Java

TEMA 10
Stream. Ficheros en Java
Un programa puede leer la entrada desde una fuente de datos leyendo una secuencia de caracteres desde un canal agregado a la fuente. Un programa puede producir una salida escribiendo una secuencia de caracteres en un canal agregado al destino. El entorno de desarrollo de Java incluye un paquete, java.io, que contiene un juego de canales de entrada y salida que los programas pueden utilizar para leer y escribir datos. Las clases InputStream y OutputStream del paquete java.io son superclases abstractas que definen el comportamiento de los canales de I/O secuenciales de Java. java.io tambin incluye muchas subclases de InputStream y OtputStream que implementan tipos especficos de canales de I/O.

Introduccin: Los objetos System.in y System.out


La entrada/salida estndar (normalmente el teclado y la pantalla, respectivamente) se definen mediante dos objetos que puede usar el programador sin tener que crear flujos especficos. class HelloWorldApp { public static void main (String[] args) { System.out.println("Hola Mundo!"); } }
Ejemplo 10.1: Utilizacin del objeto System.out

Jess Cceres Tello

Pg. 1 - 22

Curso de Java

La clase System tiene un miembro dato denominado in que es una instancia de la clase InputStream que representa al teclado o flujo de entrada estndar. Sin embrago, el miembro out de la clase System es un objeto de la clase PrintStream, que imprime texto en la pantalla (la salida estndar). Para leer un carcter solamente tenemos que llamar a la funcin read desde System.in. Obligatoriamente, el proceso de lectura ha de estar en un bloque try..catch.
class Count { public static void main(String[] args) { int count = 0; try { while (System.in.read() != -1) count++; }catch (java.io.IOException e) {} System.out.println("La entrada tiene " + count + " caracteres."); } }

class Count { public static void main(String[] args) throws java.io.IOException { int count = 0; while (System.in.read() != -1) count++; System.out.println("La entrada tiene " + count + " caracteres."); } }

Ejemplo 10.2: Utilizacin del objeto System.in

Esta porcin de cdigo es la que se ha empleado en muchas aplicaciones para detener la ejecucin de una aplicacin hasta que se pulse la tecla RETORNO. Para leer un conjunto de caracteres hasta que se pulse la tecla RETORNO escribimos
StringBuffer str=new StringBuffer(); char c; try{ while ((c=(char)System.in.read())!='\n'){ str.append(c); } }catch(IOException ex){} Ejemplo 10.3: Lectura de caracteres desde el teclado. NOTA: La clase StringBuffer es una clase que nos permite crear strings. Contiene mtodos para aadir nuevos caracteres a un buffer y convertir el resultado final en un string. Las
Jess Cceres Tello

Pg. 2 - 22

Curso de Java

principales funciones miembro son insert y append. Usamos una versin de esta ltima funcin para aadir un carcter al final de un objeto de la clase StringBuffer. Para convertir un objeto str de la clase StringBuffer a String se usa la funcin miembro toString. Esta llamada se hace de forma implcita cuando dicho objeto se le pasa a System.out.println.

Finalmente, se ha de hacer notar, que la funcin read miembro de InputStream devuelve un int que es promocionado a char. Todos los lenguajes de programacin tienen alguna forma de interactuar con los sistemas de ficheros locales; Java no es una excepcin. Cuando se desarrollan applets para utilizar en red, hay que tener en cuenta que la entrada/salida directa a fichero es una violacin de seguridad de acceso. Muchos usuarios configurarn sus navegadores para permitir el acceso al sistema de ficheros, pero otros no.

import java.io.*; public class suma { public static void main (String [] args) { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader (isr); try { System.out.print("Sumando 1 : "); int s1 = Integer.parseInt(br.readLine()); System.out.print("Sumando 2 : "); int s2 = Integer.parseInt(br.readLine()); int suma=s1+s2; System.out.println ("La suma es " + s1 + "+" + s2 +"="+ suma); } catch (Exception e) { e.printStackTrace(); }

Ejemplo 10.4: Utilizacin de la clase InputStreamReader para la lectura de datos del teclado

Jess Cceres Tello

Pg. 3 - 22

Curso de Java

Ficheros
Antes de realizar acciones sobre un fichero, necesitamos un poco de informacin sobre ese fichero. La clase File proporciona muchas utilidades relacionadas con ficheros y con la obtencin de informacin bsica sobre esos ficheros. Creacin de un objeto File

Para crear un objeto File nuevo, se puede utilizar cualquiera de los tres constructores siguientes: File miFichero; miFichero = new File( "/etc/kk" );

miFichero = new File( "/etc","kk" );

File miDirectorio = new File( "/etc" ); miFichero = new File( miDirectorio,"kk" );

El constructor utilizado depende a menudo de otros objetos File necesarios para el acceso. Por ejemplo, si slo se utiliza un fichero en la aplicacin, el primer constructor es el mejor. Si en cambio, se utilizan muchos ficheros desde un mismo directorio, el segundo o tercer constructor sern ms cmodos. Y si el directorio o el fichero es una variable, el segundo constructor ser el ms til.

Comprobaciones y Utilidades

Una vez creado un objeto File, se puede utilizar uno de los siguientes mtodos para reunir informacin sobre el fichero: Nombres de fichero String getName() String getPath() String getAbsolutePath() String getParent() boolean renameTo( File nuevoNombre ) Comprobaciones boolean boolean boolean boolean
Jess Cceres Tello

exists() canWrite() canRead() isFile()


Pg. 4 - 22

Curso de Java

boolean isDirectory() boolean isAbsolute() Informacin general del fichero long lastModified() long length() Utilidades de directorio boolean mkdir() String[] list() El siguiente ejemplo muestras informacin sobre los ficheros pasados como argumentos en la lnea de comandos.

import java.io.*; class InfoFichero { public static void main( String args[] ) throws IOException { if( args.length > 0 ) { for( int i=0; i < args.length; i++ ) { File f = new File( args[i] ); System.out.println( "Nombre: "+f.getName() ); System.out.println( "Camino: "+f.getPath() ); if( f.exists() ) { System.out.print( "Fichero existente " ); System.out.print( (f.canRead() ? " y se puede Leer" : "" ) ); System.out.print( (f.canWrite() ? " y se puese Escribir" : "" ) ); System.out.println( "." ); System.out.println( "La longitud del fichero son "+ f.length()+" bytes" ); } else System.out.println( "El fichero no existe." ); }

} else System.out.println( "Debe indicar un fichero." ); } }

Ejemplo 10.4: Obteniendo propiedades de ficheros

Jess Cceres Tello

Pg. 5 - 22

Curso de Java

STREAMS DE ENTRADA
Hay muchas clases dedicadas a la obtencin de entrada desde un fichero. Este es el esquema de la jerarqua de clases de entrada por fichero:
InputStream ByteArrayInputStrea m StringBufferInputStr eam FileInputStream LineNumberInputStream BufferedInputStream

SequenceInputStream PipedInputStream FilterInputStream DataInputStream PushBackInputStream

Jerarqua de clases de InputStream

Objetos FileInputStream
Los objetos FileInputStream tpicamente representan ficheros de texto accedidos en orden secuencial, byte a byte. Con FileInputStream, se puede elegir acceder a un byte, varios bytes o al fichero completo. Apertura de un FileInputStream Para abrir un FileInputStream sobre un fichero, se le da al constructor un String o un objeto File:
FileInputStream mi FicheroSt; miFicheroSt = new FileInputStream( "/etc/kk" );

Tambin se puede utilizar:


File miFichero FileInputStream miFicheroSt; miFichero = new File( "/etc/kk" ); miFicheroSt = new FileInputStream(miFichero);

Lectura de un FileInputStream Una vez abierto el FileInputStream, se puede leer de l. El mtodo read() tiene muchas opciones:

Jess Cceres Tello

Pg. 6 - 22

Curso de Java

int read();

Lee un byte y devuelve -1 al final del stream. int read( byte b[] );

Llena todo el array, si es posible. Devuelve el nmero de bytes ledos o -1 si se alcanz el final del stream. int read( byte b[],int offset,int longitud );

Lee longitud bytes en b comenzando por b[offset]. Devuelve el nmero de bytes ledos o -1 si se alcanz el final del stream. Cierre de FileInputStream Cuando se termina con un fichero, existen dos opciones para cerrarlo: explcitamente, o implcitamente cuando se recicla el objeto (el garbage collector se encarga de ello). Para cerrarlo explcitamente, se utiliza el mtodo close(): miFicheroSt.close();

Ejemplo: Visualizacin de un fichero Si la configuracin de la seguridad de Java permite el acceso a ficheros, se puede ver el contenido de un fichero mediante el mtodo read():
FileInputStream fis; TextArea ta; public void lecturaDeCaracter() { byte b[] = new byte[1024]; int i; String s; try { fis = new FileInputStream( "/etc/kk" ); } catch( FileNotFoundException e ) { /* Hacer algo */ } try { i = fis.read( b ); } catch( IOException e ) { /* Hacer algo */} } s = new String( b,0 );

Ejemplo 10.5: Lectura de datos del fichero de entrada

Jess Cceres Tello

Pg. 7 - 22

Curso de Java

Objetos DataInputStream
Los objetos DataInputStream se comportan como los FileInputStream. Los streams de datos pueden leer cualquiera de las variables de tipo nativo, como floats, ints o chars. Apertura y cierre de DataInputStream Para abrir y cerrar un objeto DataInputStream, se utilizan los mismos mtodos que para FileInputStream:
DataInputStream miDStream; FileInputStream miFStream; // Obtiene un controlador de fichero miFStream = new FileInputStream "/etc/ejemplo.dbf" ); //Encadena un fichero de entrada de datos miDStream = new DataInputStream( miFStream ); // Ahora se pueden utilizar los dos streams de entrada para // acceder al fichero (si se quiere...) b = miFStream.read( b ); i = miDStream.readInt(); // Cierra el fichero de datos explcitamente //Siempre se cierra primero el fichero stream de mayor nivel miDStream.close(); miFStream.close();

Ejemplo 10.6: Utilizacin del objeto DataInputStream

Lectura de un DataInputStream Al acceder a un fichero como DataInputStream, se pueden utilizar los mismos mtodos read() de los objetos FileInputStream. No obstante, tambin se tiene acceso a otros mtodos diseados para leer cada uno de los tipos de datos:
byte readByte() int readUnsignedByte() short readShort() int readUnsignedShort() char readChar() int readInt() long readLong() float readFloat() double readDouble() String readLine()

Jess Cceres Tello

Pg. 8 - 22

Curso de Java

Cada mtodo leer un objeto del tipo pedido. Para el mtodo String readLine(), se marca el final de la cadena con \n, \r, \r\n o con EOF. Para leer un long, por ejemplo: long numeroSerie; ... numeroSerie = miDStream.readLong();

Streams de entrada de URLs


Adems del acceso a ficheros, Java proporciona la posibilidad de acceder a URLs como una forma de acceder a objetos a travs de la red. Se utiliza implcitamente un objeto URL al acceder a sonidos e imgenes, con el mtodo getDocumentBase() en los applets:
String imagenFich = "imagenes/pepe.gif"; imagenes[0] = getImage( getDocumentBase(),imagenFich );

No obstante, se puede proporcionar directamente un URL, si se quiere: URL imagenSrc; imagenSrc = new URL( "http://enterprise.com/~info" ); imagenes[0] = getImage( imagenSrc,"imagenes/pepe.gif" );

Apertura de un Stream de entrada de URL Tambin se puede abrir un stream de entrada a partir de un URL. Por ejemplo, se puede utilizar un fichero de datos para un applet:
byte buffer[] = new byte[24]; InputStream is = new URL( getDocumentBase(),datos).openStream();

Ahora se puede utilizar is para leer informacin de la misma forma que se hace con un objeto FileInputStream: is.read( buffer,0,buffer.length );

NOTA: Debe tenerse muy en cuenta que algunos usuarios pueden haber configurado la seguridad de sus navegadores para que los applets no accedan a ficheros.

Jess Cceres Tello

Pg. 9 - 22

Curso de Java

STREAMS DE SALIDA
La contrapartida necesaria de la lectura de datos es la escritura de datos. Como con los Streams de entrada, las clases de salida estn ordenadas jerrquicamente:

OutputStream ByteArrayOutputStre am

PipedInputStream FilterOutputStream

FileOutputStream

DataOutputStream PrintStream

BufferedOutputStream

Examinaremos las clases FileOutputStream y DataOutputStream para complementar los streams de entrada que se han visto. En los ficheros fuente del directorio %JAVA_HOME%/src/java/io se puede ver el uso y mtodos de estas clases, as como de los streams de entrada.

Objetos FileOutputStream
Los objetos FileOutputStream son tiles para la escritura de ficheros de texto. Como con los ficheros de entrada, primero se necesita abrir el fichero para luego escribir en l. Apertura de un FileOutputStream Para abrir un objeto FileOutputStream, se tienen las mismas posibilidades que para abrir un fichero stream de entrada. Se le da al constructor un String o un objeto File. FileOutputStream miFicheroSt; miFicheroSt = new FileOutputStream( "/etc/kk" );

Como con los streams de entrada, tambin se puede utilizar:

File miFichero FileOutputStream miFicheroSt; miFichero = new File( "/etc/kk" ); miFicheroSt = new FileOutputStream( miFichero );

Jess Cceres Tello

Pg. 10 - 22

Curso de Java

Escritura en un FileOutputStream Una vez abierto el fichero, se pueden escribir bytes de datos utilizando el mtodo write(). Como con el mtodo read() de los streams de entrada, tenemos tres posibilidades: void write( int b ); Escribe un byte. void write( byte b[] ); Escribe todo el array, si es posible. void write( byte b[],int offset,int longitud ); Escribe longitud bytes en b comenzando por b[offset]. Cierre de FileOutputStream Cerrar un stream de salida es similar a cerrar streams de entrada. Se puede utilizar el mtodo explcito: miFicheroSt.close(); O, se puede dejar que el sistema cierre el fichero cuando se recicle miFicheroSt. Ejemplo: Almacenamiento de Informacin El siguiente ejemplo solicita al usuario los datos para escribirlos en un fichero de salida Telefonos.dat. Cada nombre y nmero se aade a un fichero situado en una localizacin fija. Para indicar que se ha introducido toda la lista, el usuario especifica "Fin" ante la solicitud de entrada del nombre. Una vez que el usuario ha terminado de teclear la lista, el programa crear un fichero de salida que se mostrar en pantalla o se imprimir. Por ejemplo: 95-4751232,Juanito 564878,Luisa 123456,Pepe 347698,Antonio 91-3547621,Maria

Jess Cceres Tello

Pg. 11 - 22

Curso de Java

import java.io.*; class Telefonos { static FileOutputStream fos; public static final int longLinea = 81; public static void main( String args[] ) throws IOException { byte tfno[] = new byte[longLinea]; byte nombre[] = new byte[longLinea]; fos = new FileOutputStream( "telefono.dat" ); while( true ) { System.err.println( "Teclee un nombre ('Fin' termina)" ); leeLinea( nombre ); if( "fin".equalsIgnoreCase( new String( nombre,0,0,3 ) ) ) break; System.err.println( "Teclee el numero de telefono" ); leeLinea( tfno ); for( int i=0; tfno[i] != 0; i++ ) fos.write( tfno[i] ); fos.write( ',' ); for( int i=0; nombre[i] != 0; i++ ) fos.write( nombre[i] ); fos.write( '\n' ); } fos.close(); } private static void leeLinea( byte linea[] ) throws IOException { int b = 0; int i = 0; while( (i < ( longLinea-1) ) && ( ( b = System.in.read() ) != '\n' ) ) linea[i++] = (byte)b; linea[i] = (byte)0; }

Ejemplo 10.7: Visualizacin del contenido de un fichero

Streams de salida con buffer


Si se trabaja con gran cantidad de datos, o se escriben muchos elementos pequeos, ser una buena idea utilizar un stream de salida con buffer. Los streams con buffer ofrecen los mismos mtodos de la clase FileOutputStream, pero toda salida se almacena en un buffer. Cuando se llena el buffer, se enva a disco con una nica operacin de escritura; o, en caso necesario, se puede enviar el buffer a disco en cualquier momento.

Jess Cceres Tello

Pg. 12 - 22

Curso de Java

Creacin de Streams de salida con buffer Para crear un stream BufferedOutput, primero se necesita un stream FileOutput normal; entonces se le aade un buffer al stream: FileOutputStream miFileStream; BufferdOutpurStream miBufferStream; // Obtiene un controlador de fichero miFileStream = new FileOutputStream( "/tmp/kk" ); // Encadena un stream de salida con buffer miBufferStream = new BufferedOutputStream( miFileStream );

Volcado y Cierre de Streams de salida con buffer Al contrario que los streams FileOutput, cada escritura al buffer no se corresponde con una escritura en disco. A menos que se llene el buffer antes de que termine el programa, cuando se quiera volcar el buffer explcitamente se debe hacer mediante una llamada a flush():

// Se fuerza el volcado del buffer a disco miBufferStream.flush(); // Cerramos el fichero de datos. Siempre se ha de cerrar primero el // fichero stream de mayor nivel miBufferStream.close(); miFileStream.close();

Objetos DataOutput
Java tambin implementa una clase de salida complementaria a la clase DataInputStream. Con la clase DataOutputStream, se pueden escribir datos binarios en un fichero. Apertura y cierre de objetos DataOutputStream Para abrir y cerrar objetos DataOutputStream, se utilizan los mismos mtodos que para los objetos FileOutputStream:

Jess Cceres Tello

Pg. 13 - 22

Curso de Java

DataOutputStream miDataStream; FileOutputStream miFileStream; BufferedOutputStream miBufferStream; // Obtiene un controlador de fichero miFileStream = new FileOutputStream( "/tmp/kk" ); // Encadena un stream de salida con buffer (por eficiencia) miBufferStream = new BufferedOutputStream( miFileStream ); // Encadena un fichero de salida de datos miDataStream = new DataOutputStream( miBufferStream ); // Ahora se pueden utilizar los dos streams de entrada para // acceder al fichero (si se quiere) miBufferStream.write( b ); miDataStream.writeInt( i ); // Cierra el fichero de datos explcitamente. Siempre se cierra // primero el fichero stream de mayor nivel miDataStream.close(); miBufferStream.close(); miFileStream.close();

Escritura en un objeto DataOutputStream Cada uno de los mtodos write() accesibles por los FileOutputStream tambin lo son a travs de los DataOutputStream. Tambin encontrar mtodos complementarios a los de DataInputStream: void writeBoolean( boolean b ); void writeByte( int i ); void writeShort( int i ); void writeChar( int i ); void writeInt( int i ); void writeFloat( float f ); void writeDouble( double d ); void writeBytes( String s ); void writeChars( string s );

Jess Cceres Tello

Pg. 14 - 22

Curso de Java

Para las cadenas, se tienen dos posibilidades: bytes y caracteres. Hay que recordar que los bytes son objetos de 8 bits y los caracteres lo son de 16 bits. Si nuestras cadenas utilizan caracteres Unicode, debemos escribirlas con writeChars(). Contabilidad de la salida Otra funcin necesaria durante la salida es el mtodo size(). Este mtodo simplemente devuelve el nmero total de bytes escritos en el fichero. Se puede utilizar size() para ajustar el tamao de un fichero a mltiplo de cuatro. Por ejemplo, de la forma siguiente: ... int numBytes = miDataStream.size() % 4; for( int i=0; i < numBytes; i++ ) miDataStream.write( 0 ); ...

FICHEROS DE ACCESO ALEATORIO


A menudo, no se desea leer un fichero de principio a fin; sino acceder al fichero como una base de datos, donde se salta de un registro a otro; cada uno en diferentes partes del fichero. Java proporciona una clase RandomAccessFile para este tipo de entrada/salida. Creacin de un Fichero de Acceso Aleatorio Hay dos posibilidades para abrir un fichero de acceso aleatorio: Con el nombre del fichero: miRAFile = new RandomAccessFile( String nombre,String modo );

Con un objeto File: miRAFile = new RandomAccessFile( File fichero,String modo );

El argumento modo determina si se tiene acceso de slo lectura (r) o de lectura/escritura (r/w). Por ejemplo, se puede abrir un fichero de una base de datos para actualizacin:

Jess Cceres Tello

Pg. 15 - 22

Curso de Java

RandomAccessFile miRAFile; miRAFile = new RandomAccessFile( "/tmp/kk.dbf","rw" );

Acceso a la Informacin Los objetos RandomAccessFile esperan informacin de lectura/escritura de la misma manera que los objetos DataInput/DataOutput. Se tiene acceso a todas las operaciones read() y write() de las clases DataInputStream y DataOutputStream. Tambin se tienen muchos mtodos para moverse dentro de un fichero: long getFilePointer(); Devuelve la posicin actual del puntero del fichero void seek( long pos ); Coloca el puntero del fichero en una posicin determinada. La posicin se da como un desplazamiento en bytes desde el comienzo del fichero. La posicin 0 marca el comienzo de ese fichero. long length(); Devuelve la longitud del fichero. La posicin length() marca el final de ese fichero. Actualizacin de Informacin Se pueden utilizar ficheros de acceso aleatorio para aadir informacin a ficheros existentes:

miRAFile = new RandomAccessFile( "/tmp/kk.log","rw" ); miRAFile.seek( miRAFile.length() ); // Cualquier write() que hagamos a partir de este punto del cdigo aadir informacin al fichero

En el siguiente ejemplo se aade una cadena a un fichero existente.

Jess Cceres Tello

Pg. 16 - 22

Curso de Java

import java.io.*; // Cada vez que ejecutemos este programita, se incorporara una nueva // linea al fichero de log que se crea la primera vez que se ejecuta // class Log { public static void main( String args[] ) throws IOException { RandomAccessFile miRAFile; String s = "Informacion a incorporar\nTutorial de Java\n"; // Abrimos el fichero de acceso aleatorio miRAFile = new RandomAccessFile( "/tmp/java.log","rw" ); // Nos vamos al final del fichero miRAFile.seek( miRAFile.length() ); // Incorporamos la cadena al fichero miRAFile.writeBytes( s ); // Cerramos el fichero miRAFile.close(); } }
Ejemplo 10.8: Fichero de acceso aleatorio en Java

Jess Cceres Tello

Pg. 17 - 22

Curso de Java

Laboratorio
El siguiente ejemplo muestra cmo se puede copiar el contenido de un fichero binario en otro utilizando los mtodos read() y write().
import import import import java.io.BufferedInputStream; java.io.BufferedOutputStream; java.io.FileInputStream; java.io.FileOutputStream;

public class CopiaFicheros { public static void main(String[] args) { copia ("c:/ficheroOrigen.bin", "c:/ficheroDestino.bin"); } public static void copia (String ficheroOriginal, String ficheroCopia) { try { FileInputStream fileInput = new FileInputStream(ficheroOriginal); BufferedInputStream bufferedInput = new BufferedInputStream(fileInput); // Se abre el fichero donde se har la copia FileOutputStream fileOutput = new FileOutputStream (ficheroCopia); BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutput); // Bucle para leer de un fichero y escribir en el otro. byte [] array = new byte[1000]; int leidos = bufferedInput.read(array); while (leidos > 0) { bufferedOutput.write(array,0,leidos); leidos=bufferedInput.read(array); } // Cierre de los ficheros bufferedInput.close(); bufferedOutput.close(); }catch (Exception e) { e.printStackTrace(); } } }

Jess Cceres Tello

Pg. 18 - 22

Curso de Java

Qu imprimir el siguiente programa si al ejecutarlo se escribe: a) java Ejercicio n? b) java Ejercicio s? c) java Ejercicio p? class Laboratorio2 { public static void main (String [] args){ char valor=(args[0]).charAt(0); try { if (valor=='n') throw new Aexception(); if (valor==s) throw new Bexception(); System.out.println("Estoy en try"); } catch (Aexception a){ System.out.println("Error tipo A"); } catch (Bexception b) { System.out.println("Error tipo B"); } finally{ System.out.println("Estoy en finally"); } System.out.println("Acabar"); } }//fin clase Ejercicio class Aexception extends Exception{} //fin clase Aexception class Bexception extends Exception{} //fin clase Bexception

Jess Cceres Tello

Pg. 19 - 22

Curso de Java

Qu imprimir el siguiente programa en el caso de que a) El fichero datos no exista? b) la variable cont valga 5 despu s de cerrar el fichero c) la variable cont valga 3 despu s de cerrar el fichero import java.io.*; class Miexcepcion extends Exception{ public Miexcepcion(){} }//fin Miexcepcion class Ficheros { public static void main(String [] args) throws IOException { int entero,cont=0, x=10; boolean seguir=true; DataInputStream entrada=null; try { entrada=new DataInputStream(new BufferedInputStream( new FileInputStream("datos"))); } catch(FileNotFoundException e) { System.out.println("Error en la apertura de datos"); seguir=false; } //fin primer bloque try-catch if (seguir) { while (seguir) { try { entero=entrada.readInt(); cont++; } catch(EOFException e) { seguir=false; } //fin segundo bloque try-catch } // Fin del while entrada.close(); try { if (cont<=4) throw new Miexcepcion(); x=x+cont; System.out.println ("x="+x); } catch (Miexcepcion me){ System.out.println ("cont<=4"); }//fin tercer bloque try-catch } // Fin del if } // Fin mtodo main } // Fin clase Ficheros

Jess Cceres Tello

Pg. 20 - 22

Curso de Java

Cul es el error del siguiente programa? a) salida.writeInt() debe ser datos.writeInt() b) datos.close() debe ser salida.close() c) No hace falta capturar la IOException d) Sobra la lnea import java.io.*;

import java.io.*; class Ficheros { public static void main(String [] args) { DataOutputStream salida; //Se crea la referencia try { // Creando el fichero salida=new DataOutputStream(new FileOutputStream("datos")); /* Si no ha habido error de lectura se escribe un fichero de enteros*/ for (int i=0;i<=10;i++) salida.writeInt(i); datos.close(); } // Fin try catch(IOException e) { System.out.println("Excepcion de entrada/salida: " +e.toString()); } } // Fin mtodo main } // Fin clase Ficheros

Jess Cceres Tello

Pg. 21 - 22

Curso de Java

Ejercicios
Implementar una aplicacin en Java que escriba una agenda telefnica con los siguientes campos para cada individuo. 1. 2. 3. 4. 5. 6. nombre apellidos direccin poblacin telefono fecha de nacimiento

La aplicacin deber tener dos partes. Por una parte escribir los datos proporcionados por teclado y los guardar en el fichero. Por otro lado permitir la consulta de todos los datos almacenados visualizndose un listado de ellos.

Crear una clase pblica de nombre EjercicioString1 que contenga slo al mtodo main y partiendo de la String "En mi proxima vida, creere en la reencarnacion" declarada e inicializada como variable primitiva, mostrar por consola lo siguiente: 1. 2. 3. 4. 5. 6. Su longitud El carcter asociado al ndice 7 La subcadena "creere" El ndice que ocupa el carcter 'x' La String transformada en maysculas Por ltimo, comprobar si el primer carcter de la String es 'E' y mostrar por consola un mensaje que lo indique.

Ejemplo de ejecucin: Longitud de la cadena: 46 Indice 7 asociado al caracter r La subcadena generada desde 20 incluido hasta 26 excluido es creere El indice del caracter x es 9 La cadena en mayusculas es: EN MI PROXIMA VIDA, CREERE EN LA REENCARNACION La String comienza por E

Jess Cceres Tello

Pg. 22 - 22

Vous aimerez peut-être aussi