I’m running a program to compare and search specific files

Asked

Viewed 109 times

0

I am performing a task consisting of listing all data contained in a folder.

After listing, I need to check if inside the folders there are files with a specific extension (eg. txt.

Besides checking the extension, I need to compare the files with the extension found and show the differences between the two.

What I managed to accomplish:

Fetch the data, check the data contained within the folder as well.

Code done so far:

public class ListagemArquivoPasta {

    public static void main(String args[]) {

        File diretorio = new File("C:"); // realiza a busca do que tem dentro da pasta rede

        for(File file:diretorio.listFiles()) {
            System.out.println(file.getName());
        }


        Path caminho;
        caminho = Paths.get("C:");
        try {
            byte[] texto = Files.readAllBytes(caminho); // realiza a busca do que tem no arquivo especificado
            String leitura = new String(texto);
            System.out.println(leitura);

        } catch (IOException | HeadlessException erro) {

        }

    }

}

1 answer

0

To check if there are files with a specific extension you can use the contains() function within the range where you list your files, this way:

for(File file:diretorio.listFiles()) {
    if(file.getName().contains(".txt")) { // verificando se o arquivo é da extensão txt
        arquivos.add(file.getAbsolutePath()); // se sim, adiciona ele ao array de arquivos
    }
}

Note that in this code I am saving the path of files with extension txt found in order to access them later. To be able to compare the information of both you need to use the Bufferedreader and compare row by row of the files, checking if they are the same or different until the files reach the end (that is, when the contents of your lines are empty), thus:

Bufferedreader reader1 = new Bufferedreader(new Filereader(.get(0)); Bufferedreader reader2 = new Bufferedreader(new Filereader(.get(1 files)));

String linha1 = leitor1.readLine();
String linha2 = leitor2.readLine();
int numeroLinha = 1;

while (linha1 != null && linha2 != null) {

    if(! linha1.equalsIgnoreCase(linha2)) {
        System.out.println("Diferença encontrada na linha " + numeroLinha + ": \n");
        System.out.println("Arquivo 1: " + linha1);
        System.out.println("Arquivo 2: " + linha2);
        System.out.println("--------------------------\n");
        arquivosIguais = false;
    }

    linha1 = leitor1.readLine();
    linha2 = leitor2.readLine();

    numeroLinha++;
}

The complete code gets:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;

public class ListagemArquivoPasta {

    public static void main(String[] args) throws IOException, FileNotFoundException {

        ArrayList<String> arquivos = new ArrayList(); // Criando um array para guardar os nomes dos arquivos
        File diretorio = new File("C:\\Data"); // realiza a busca do que tem dentro da pasta rede

        boolean arquivosIguais = true;

        for(File file:diretorio.listFiles()) {
            if(file.getName().contains(".txt")) { // verificando se o arquivo é da extensão txt
                arquivos.add(file.getAbsolutePath()); // se sim, adiciona ele ao array de arquivos
            }
        }

        BufferedReader leitor1 = new BufferedReader(new FileReader(arquivos.get(0)));
        BufferedReader leitor2 = new BufferedReader(new FileReader(arquivos.get(1)));

        String linha1 = leitor1.readLine();
        String linha2 = leitor2.readLine();
        int numeroLinha = 1;

        while (linha1 != null && linha2 != null) {

            if(! linha1.equalsIgnoreCase(linha2)) {
                System.out.println("Diferença encontrada na linha " + numeroLinha + ": \n");
                System.out.println("Arquivo 1: " + linha1);
                System.out.println("Arquivo 2: " + linha2);
                System.out.println("--------------------------\n");
                arquivosIguais = false;
            }

            linha1 = leitor1.readLine();
            linha2 = leitor2.readLine();

            numeroLinha++;
        }

        if (arquivosIguais) {
            System.out.println("\nArquivos iguais");
        } else {
            System.out.println("\nArquivos diferentes");
        }
    }
}

Note that this code compares only two files with extension txt, but I think it gives you a basis on how to compare a larger amount of files.

  • 1

    Dude, you have no idea how much you’ve helped me, !

  • Good! If it helped you accept the answer as correct : )

Browser other questions tagged

You are not signed in. Login or sign up in order to post.