Leer ficheros con la clase Scanner

Aparte de leer por teclado con la clase Scanner como expliqué aquí, con la cual podemos leer de una manera muy sencilla ya sea con el método .next() hasta que encuentra un espacio, o bien con .nextLine() toda la linea, podemos leer también ficheros de una forma muy fácil.

Lo primero será crear el fichero a leer, un txt en el que escribiremos varias lineas por ejemplo varios nombres con número que pueden indicar edad, todo separado por comas o con espacios, esos a nuestro gusto:

Manuel , 13 , 500,
María, 50, 1000
Arturo, 35, 900

Lo primero será crearnos un File e indicamos la ruta del fichero que crearmos antes que llamamos “fichero.txt”, y luego un objeto Scanner al que le pasaremos el File (en vez de el System.in para leer por teclado), y finalmente cerraremos el fichero.

Además tendremos que capturar la expeción  FileNotFoundException, por ejemplo con un try-catch:

try {
File fich = new File ("/ruta/fichero.txt");
Scanner scn = new Scanner (fich);

//aquí el bucle

scn.close();

}

catch (FileNotFoundException fnfe){
fnfe.printStackTrace();
}

Para leer las lineas nos valdremos de un bucle, en el que utilizaremos los métodos .hasNextLine() que nos dice si hay o no otra linea mediante un boolean y el metodo .nextLine() que nos devuelve dicha linea.

while (scn.hasNextLine()){
			String linea = scn.nextLine();
			System.out.println(linea);
		}

Este método nos irá imprimiendo por consola las líneas que tenga el fichero.

Si queremos que nos divida los datos por espacios o por comas, o por lo que pongamos entre dato y dato.
Gracias al método .useDelimiter(), podremos añadir los elementos con los que delimitar la cadena, en este caso \\s se corresponde al espacio, y \\s* indica 0 o más espacios.

while (scn.hasNextLine()){
			String linea = scn.nextLine();
			Scanner sl = new Scanner(linea);
			sl.useDelimiter("\\s*,\\s*");

			System.out.println(sl.next());
			System.out.println(sl.next());
			System.out.println(sl.next());

		}

One Response to Leer ficheros con la clase Scanner

  1. Alberto Medina dice:

    Gracias! Una duda, si quisiera buscar una cadena en específico con .contains(), ¿cómo lo puedo hacer? estoy manejando un archivo de configuración, y uso etiquetas como si fuera xml.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: