Leyendo archivos en Java

Muy bienvenidos a mi hermoso blog (debería escribir más seguido). En esta ocasión ver como leer de manera sencilla un archivo que tengamos linea a linea.

Lo primero que vamos a necesitar es nuestra clase encargada de leer el archivo, la cual vamos a llamar para el ejemplo LeerArchivos y a la cual le vamos a dar un método llamado leer.

public class LeerArchivos{
     public void leer(){}
}

Ya tenemos la clase, ahora tenemos que ir solucionando problemas uno a uno. Vamos a ver entonces primero en donde poner el texto del archivo ya leido. Para almacenar el texto vamos a usar un StringBuilder (No vamos a usar un String común ya que estos son inmutables, para más detalles, vean el video, pero algún día vamos a hablar de esto a fondo).

StringBuilder sb = new StringBuilder();

El siguiente problema es buscar el archivo, para esto vamos a usar Path y Paths. Básicamente lo que necesitamos es un path donde está nuestro archivo y este lo sacamos de usar Paths.get() (Que nos va a devolver el Path que necesitamos)

Path filePath = Paths.get("ruta del archivo\\archivo");

Notese que uso doble barra ya que en un String, las barras sirven para distintos tipos de escape (Por ejemplo \n significa salto de linea) y cuando quiero poner una barra en el texto necesito poner otra que la preceda.

Ya con el lugar donde vamos a depositar el texto leido y que archivo vamos a leer necesitamos el mecanismo que lea, para esto vamos a usar un objeto de tipo BufferedReader. Esto sirve básicamente para leer de algún tipo de input, en este caso de un archivo. Para leer de un archivo vamos a hacer esto:

BufferedReader br = Files.newBufferedReader(filePath);

Como abrir un archivo para su lectura es algo que puede traernos cantidades de excepciones, se nos va a requerir un bloque try/catch, con lo que nuestro código pasaría a ser algo así:

try{
    BufferedReader br = Files.newBufferedReader(filePath);
} catch(IOException e) {
    e.printStackTrace();
}

Después dejen lindo el try/catch a gusto, pero a priori esto sirve.

Ahora que ya tenemos esto, vamos pasando linea a linea nuestro texto al StringBuilder

String linea;
While((linea = br.readLine()) != null) {
     sb.append(linea).append("\n");
}

Si esto los marea les explico: En mi While, le digo que el ciclo va a repetirse leyendo una linea y sumándosela a la variable linea y se corte si eso da null, lo cual es como un «se terminó el archivo y no hay nada más que leer».

Dentro del While voy a ir agregando lo que se lee y se pasa a la variable linea y un \n para hacer el salto de linea.

Con esto ya tenemos nuestra clase de lectura de archivos que quedaría en definitiva así:

public class LeerArchivos{
     public void leer(){
         StringBuilder sb = new StringBuilder();
         Path filePath = Paths.get("ruta del archivo\\archivo");
         try{
              BufferedReader br = Files.newBufferedReader(filePath);
              String linea;
              While((linea = br.readLine()) != null) {
                   sb.append(linea).append("\n");
              }
         } catch(IOException e) {
              e.printStackTrace();
         }
    }
}

Con lo que si quieren ver como funciona, solo deben crear una clase main, poner dentro un objeto de tipo LeerArchivo y ejecutar nuestro método leer:

public class Principal {
     public static void main(String[] args){
          LeerArchivo leerArchivo = new LeerArchivo();
          leerArchivo.leer();
     }
}

Y esto es todo por hoy, espero que les haya servido.