En este ejemplo vamos a ver como podemos comparar el contenido de dos ficheros de texto con Java y comprobar si el contenido es el mismo o es diferente.
Lo primero será crear una clase del tipo FileReader. Esta clase nos va a ayudar a acceder al contenido de los ficheros, conjuntamente con un BufferedReader. De esta forma crear un stream de un fichero a un BufferedReaderr lo podemos hacer con el siguiente código:
FileReader fr1 = new FileReader("fichero1.txt");
BufferedReader bf1 = new BufferedReader(fr1);
Como tenemos dos ficheros, repetimos la misma sentencia para el segundo fichero:
FileReader fr1 = new FileReader("fichero1.txt");
FileReader fr2 = new FileReader("fichero2.txt");
BufferedReader bf1 = new BufferedReader(fr1);
BufferedReader bf2 = new BufferedReader(fr2);
Ahora que tenemos un BufferedReader será sencillo ir leyendo el contenido del fichero, ya que solo tendremos que ir lanzando el método readLine() hasta que lleguemos al final de los ficheros.
Así recorreremos los ficheros mientras lo leído no sea null, ya que significará que hemos llegado al final del fichero, o bien que asumamos que los ficheros siguen siendo iguales, lo cual controlaremos mediante una variable de bandera que denominaremos iguales.
De esta manera el bucle para recorrer los ficheros será de la siguiente forma:
sCadena1 = bf1.readLine();
sCadena2 = bf2.readLine();
while ((sCadena1!=null) && (sCadena2!=null) && iguales) {...}
Dentro del bucle compararemos las líneas almacenadas en las cadenas. Si las líneas son iguales asumiremos que los ficheros siguen siendo iguales, leeremos e iteraremos otra vez.
Si las líneas no son iguales significa que el contenido es diferente. En ese caso cambiaremos el valor de la variable iguales a «false» para provocar una salida del bucle.
El código quedará de la siguiente manera:
sCadena1 = bf1.readLine();
sCadena2 = bf2.readLine();
while ((sCadena1!=null) && (sCadena2!=null) && iguales) {
if (!sCadena1.equals(sCadena2))
iguales = false;
sCadena1 = bf1.readLine();
sCadena2 = bf2.readLine();
}
Una vez hemos salido del bucle sabremos que los ficheros son iguales si la variable iguales sigue siendo true y si hemos llegado al final de la lectura de los dos ficheros, es decir, que las variables de lectura contengan un valor null. Así tendremos el siguiente código:
if ((iguales) && (sCadena1==null) && (sCadena2==null))
System.out.println("Los ficheros son iguales");
else
System.out.println("Los ficheros son diferentes");
En todo este código tenemos que tener cuidado ya que podemos tener excepciones FileNotFoundException, si los fichero a leer no existen o IOException si tenemos problemas en la lectura de los mismos. Es por ello que todo el código irá dentro de su estructura try-catch.