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);
}
}
}
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)
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.