Java - Leer lineas de dos archivos y compararlas

 
Vista:

Leer lineas de dos archivos y compararlas

Publicado por Manuel (9 intervenciones) el 25/03/2015 06:02:06
Hola, tengo que hacer un programa que lea linea a linea de dos archivos y las compare, y si la linea se encuentra en los dos archivos, me imprima el nombre del archivo, el numero de la linea, y la linea. El problema que tengo es que no me esta iniciando desde la primera palabra ademas de que una vez termina de leer el segundo archivo, no regresa al inicio del mismo para repetir el ciclo. ¿Saben que puede ser?. Aquí está el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class ManejoArchivos {
 
    public static void main(String[] args) throws FileNotFoundException {
 
        Scanner input = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
 
        int lineNumber_1 = 0;
        int lineNumber_2 = 0;
 
        System.out.print("Archivo de Salida: ");
        String outputFileName = input.next();
 
        // Construct the Scanner and PrintWriter objects for reading and writing
        File inputFile_1 = new File("C:\\Users\\ManuelFelipe\\Documents\\NetBeansProjects\\ManejoArchivos\\passwords01.txt");
        File inputFile_2 = new File("C:\\Users\\ManuelFelipe\\Documents\\NetBeansProjects\\ManejoArchivos\\passwords02.txt");
 
        FileReader fr_1 = new FileReader(inputFile_1);
        FileReader fr_2 = new FileReader(inputFile_2);
 
        BufferedReader in_1 = new BufferedReader(fr_1);
        BufferedReader in_2 = new BufferedReader(fr_2);
 
        try {
            PrintWriter out = new PrintWriter(outputFileName);
 
            // Read the input and write the output
            String line_1 = in_1.readLine();
            String line_2 = in_2.readLine();
 
            for (lineNumber_1 = 0; ((line_1 = in_1.readLine()) != null); lineNumber_1++) {
                for (lineNumber_2 = 0; ((line_2 = in_2.readLine()) != null); lineNumber_2++) {
                    if (line_1.equals(line_2)) {
                        sb.append(inputFile_1.getName());
                        sb.append("[" + lineNumber_1 + "] - ");
                        sb.append(inputFile_2.getName());
                        sb.append("[" + lineNumber_2 + "] - ");
                        sb.append(line_1 + "\n");
                    }
                }
            }
            out.println(sb.toString());
 
            in_1.close();
            in_2.close();
            out.close();
        } catch (Exception exc) {
 
        }
    }
}

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de David

Leer lineas de dos archivos y compararlas

Publicado por David (7 intervenciones) el 27/03/2015 15:53:09
1
2
3
4
5
6
7
8
9
10
11
for (lineNumber_1 = 0; ((line_1 = in_1.readLine()) != null); lineNumber_1++) {
                for (lineNumber_2 = 0; ((line_2 = in_2.readLine()) != null); lineNumber_2++) {
                    if (line_1.equals(line_2)) {
                        sb.append(inputFile_1.getName());
                        sb.append("[" + lineNumber_1 + "] - ");
                        sb.append(inputFile_2.getName());
                        sb.append("[" + lineNumber_2 + "] - ");
                        sb.append(line_1 + "\n");
                    }
                }
            }
es obvio que si el archivo in_1 tiene 5 lineas, y in_2 tiene 8 lineas va a funcionar mal, o al contrario si in_1 tiene 8 e in_2 tiene 5 lo va a leer nuevamente (es lo que te esta sucediendo). Tu código está planteado para funcionar únicamente para archivos con el mismo número de lineas. Por experiencia te digo usa un while o dowhile son mejores para archivos en los cuales no sabes los tamaños de los objetos( en tu caso las lineas de texto). Si quieres conservar el código te aconsejo tengas un if antes del segundo for para controlar que al finalizar el segundo for (el for interno) no le permita ingresar así evitas la lectura nuevamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar