DEV Community

Tente Isto 10-1 Utilitário de comparação de arquivos

1. Objetivo do Projeto
Criar um programa em Java para comparar dois arquivos byte a byte e identificar se eles são iguais ou diferentes.
Utilizar um bloco try-with-resources para garantir o fechamento automático dos arquivos após a leitura.

2. Passos para Implementação
Nome do Arquivo: CompFiles.java

Lógica Básica:
Receber dois arquivos para comparação através da linha de comando.
Ler e comparar os arquivos byte a byte.
Exibir se os arquivos são iguais ou diferentes.

import java.io.*;

class CompFiles {
  public static void main(String args[]) {
    int i = 0, j = 0;
    int position = 0; // Contador de posição para rastrear onde os arquivos diferem

    // Verifica se foram fornecidos exatamente dois arquivos para comparação.
    if (args.length != 2) {
      System.out.println("Uso: CompFiles arquivo1 arquivo2");
      return;
    }

    // Bloco try-with-resources para abrir e comparar os arquivos automaticamente.
    try (FileInputStream f1 = new FileInputStream(args[0]);
         FileInputStream f2 = new FileInputStream(args[1])) {

      // Lê e compara os arquivos byte a byte, ignorando a caixa das letras.
      do {
        i = f1.read();
        j = f2.read();
        position++;

        // Converte para minúsculas para comparação ignorando caixa.
        if (Character.toLowerCase((char) i) != Character.toLowerCase((char) j)) {
          System.out.println("Arquivos diferem na posição: " + position);
          break;
        }
      } while (i != -1 && j != -1);

      // Se o loop terminou sem diferenças, os arquivos são iguais.
      if (i == -1 && j == -1) {
        System.out.println("Arquivos são iguais.");
      } else if (i != j) {
        System.out.println("Arquivos diferem.");
      }

    } catch (IOException exc) {
      System.out.println("Erro de I/O: " + exc);
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

Explicação das Melhorias:
Ignorar caixa das letras: A comparação usa Character.toLowerCase((char) i) para cada byte lido, permitindo que o programa ignore diferenças entre letras maiúsculas e minúsculas.
Exibir posição da diferença: A variável position rastreia o local de cada byte lido, e o programa imprime a posição exata onde encontra a primeira diferença entre os arquivos.

Top comments (1)

Collapse
 
programmerraja profile image
Boopathi

This is a great practical example of comparing files in Java. The use of try-with-resources and the detailed explanation of the code make it easy to understand.