Entrada/salida estándar

prev.gif (997 bytes)chapter.gif (1105 bytes)home.gif (1054 bytes)next.gif (998 bytes)

Entrada/salida

Los objetos System.in y System.out

La clase Reader


Los objetos System.in y System.out

La entrada/salida estándar (normalmente el teclado y la pantalla, respectivamente) se definen mediante dos objetos que puede usar el programador sin tener que crear flujos específicos.

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 estándar. Sin embrago, el miembro out de la clase System es un objeto de la clase PrintStream, que imprime texto en la pantalla (la salida estándar).

Para leer un carácter solamente tenemos que llamar a la función read desde System.in.

    try{
        System.in.read();
    }catch (IOException ex) {  }

Obligatoriamente, el proceso de lectura ha de estar en un bloque try..catch.

Esta porción de código es la que se ha empleado en muchas aplicaciones para detener la ejecución de una aplicación 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){}

La clase StringBuffer es una clase que nos permite crear strings. Contiene métodos para añadir nuevos caracteres a un buffer y convertir el resultado final en un string. Las principales funciones miembro son insert y append. Usamos una versión de esta última función para añadir un carácter al final de un objeto de la clase StringBuffer.

Para convertir un objeto str de la clase StringBuffer a String se usa la función miembro toString. Esta llamada se hace de forma implícita cuando dicho objeto se le pasa a System.out.println.

    System.out.println(str);

Finalmente, se ha de hacer notar, que la función read miembro de InputStream devuelve un int que es promocionado a char.

 

La clase Reader

disco.gif (1035 bytes)teclado2: TecladoApp2.java

Existe la posibilidad de conectar el objeto System.in con un objeto de la clase InputStreamReader para leer los caracteres tecleados por el usuario.

Esta conexión se realiza mediante la sentencia

        Reader entrada=new InputStreamReader(System.in);

Para leer una sucesión de caracteres se emplea un código similar

    StringBuffer str=new StringBuffer();
    char c;
    try{
        Reader entrada=new InputStreamReader(System.in);
        while ((c=(char)entrada.read())!='\n'){
            str.append(c);
        }
    }catch(IOException ex){}

Para imprimir los carcteres leídos se escribe como en la sección anterior

    System.out.println(str);

 

disco.gif (1035 bytes)teclado1: TecladoApp1.java

Podemos usar la segunda versión de la función read para leer el conjunto de caracteres tecleados por el usuario.

    char[] buffer=new char[255];
    try{
        Reader entrada=new InputStreamReader(System.in);
        int numBytes=entrada.read(buffer);
        System.out.println("Número de bytes leídos "+numBytes);
    }catch(IOException ex){    }

En esta segunda porción de código, se lee un conjunto de caracteres hasta que se pulsa la tecla RETORNO, los caracteres se guardan en el array buffer. La función read devuelve el número de caracteres leídos.

Para imprimir los caracteres leídos se crea un objeto str de la clase String a partir de un array de caracteres buffer, empleando uno de los contructores de dicha clase. A continuación, se imprime el string str.

	String str=new String(buffer);
	System.out.println(str);