Autor Tema: Indicador de fin de archivo para un programa en java  (Leído 19261 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado minero210

  • MiembrosReales
  • *
  • Mensajes: 21
Indicador de fin de archivo para un programa en java
« : junio 23, 2010, 07:11:04 am »
HOla!! amigos, tengo un problema con un programita en java, sobre archivos y flujos , pues en un ciclo utilizo el metodo hasNext(), para lea desde el teclado información, hasta q encuentre el indicador de fin de archivo, segun lei la combinación es ctrl+z y luego enter, pero no he podido lograr terminar ese ciclo. Tal vez me pueden ayudar, ya q esa combinación no me indica nada al programa, lo he corrido en netbeans 6.8 y tambien en modo consola.

Desconectado mxgxw

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 5665
  • Starlet - 999cc
    • mxgxw
Re:Indicador de fin de archivo para un programa en java
« Respuesta #1 : junio 23, 2010, 08:29:04 am »
HOla!! amigos, tengo un problema con un programita en java, sobre archivos y flujos , pues en un ciclo utilizo el metodo hasNext(), para lea desde el teclado información, hasta q encuentre el indicador de fin de archivo, segun lei la combinación es ctrl+z y luego enter, pero no he podido lograr terminar ese ciclo. Tal vez me pueden ayudar, ya q esa combinación no me indica nada al programa, lo he corrido en netbeans 6.8 y tambien en modo consola.

Ok mira, en java hay dos maneras de leer el fin de archivo.

La primera es leer caracter por caracter, eso lo haces mas o menos asi:

Código: [Seleccionar]
mport java.io.*;

public class InputReaderChar {

    public static void main(String args[]) throws Exception {

        int caracter;
        while((caracter=System.in.read())!=-1) { // read devuelve -1 al leer EOF
            System.out.println("Caracter: "+caracter);
        }

        System.out.println("EOF detectado!");
    }
}

Ojo con este codigo!! Aunque lee caracter por caracter la entrada no es procesada hasta que se presiona [Enter], asi que la salida es mas o menos como la siguiente:

Código: [Seleccionar]
mgomez:~/java mxgxw$ java InputReaderChar
a
Caracter: 97
Caracter: 10
b
Caracter: 98
Caracter: 10
c
Caracter: 99
Caracter: 10
<ctrl+d>
EOF detectado!

Fijate que yo uso Ctrl+D pq estoy en una mac, el caracter 10 que aparece es el retorno de carro (la tecla [Enter]. En sistemas Unix EOF es Ctrl+D en Windows es Ctrl+Z.

La otra forma que tenes es leer lineas completas como cadenas de texto. El codigo es muy similar solo que en este caso vas a tener que utilizar las clases InputStreamReader y BufferedReader.

Código: [Seleccionar]
import java.io.*;

public class InputReader {

    public static void main(String args[]) throws Exception {

        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);

        String line;
        while((line=br.readLine())!=null) { // readLine devuelve null al leer EOF
            System.out.println("Linea: "+line); // aqui procesas la linea de texto
        }

        System.out.println("EOF detectado!");
    }
}

Por que usamos un buffered Reader, bueno el InputStream que nos provee System.in solo nos permite leer caracter por caracter o una cantidad fija de bytes. El BufferedReader nos provee de la funcion readLine que lo que hace es almacenar en un buffer todos los caracteres hasta llegar al fin de linea [Enter] y nos devuelve una cadena de texto.

La diferencia principal es que cuando encuentre EOF en vez de devolvernos -1, como es un objeto nos devolvera null.

Funciona algo asi:
Código: [Seleccionar]
mgomez:~/java mxgxw$ java InputReader
linea de prueba
Linea: linea de prueba
<Ctrl+D>
EOF detectado!
« Última Modificación: junio 23, 2010, 09:05:25 am por mxgxw »


Desconectado mxgxw

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 5665
  • Starlet - 999cc
    • mxgxw
Re:Indicador de fin de archivo para un programa en java
« Respuesta #2 : junio 23, 2010, 09:13:19 am »
Me da un poco de curiosidad.... Como es que les han ensenado usar readNext para leer cadenas de texto.

Otra cosa que se me olvido aclarar. Antes en las primeras versiones de Java era posible utilizar:

Citar
System.in.readLine();

Para leer cadenas de texto. Sin embargo esa forma de leer lineas de texto esta DESCONTINUADA y no deberia ser utilizada. La forma que recomienda la gente de sun/oracle para leer lineas de texto completas es la que les puse en el ejemplo de arriba.
« Última Modificación: junio 23, 2010, 09:27:27 am por mxgxw »


Desconectado minero210

  • MiembrosReales
  • *
  • Mensajes: 21
Re:Indicador de fin de archivo para un programa en java
« Respuesta #3 : julio 07, 2010, 05:01:27 pm »
Me da un poco de curiosidad.... Como es que les han ensenado usar readNext para leer cadenas de texto.

Otra cosa que se me olvido aclarar. Antes en las primeras versiones de Java era posible utilizar:

Para leer cadenas de texto. Sin embargo esa forma de leer lineas de texto esta DESCONTINUADA y no deberia ser utilizada. La forma que recomienda la gente de sun/oracle para leer lineas de texto completas es la que les puse en el ejemplo de arriba.

hola!! gracias por contestar mi pregunta del fin de archivo, pues no tenia inter para contestar pero gracias por la ayuda.
Y pues no es el metodo readNext en el ultimo comentario el que yo preguntaba sino por hasNext, y este metodo devuelve true mientras no lea el fin de archivo y false cuando lo encuentra.