Skip to content

File Comparison Documentation

Asterios Raptis edited this page Feb 10, 2025 · 3 revisions

Introduction

Comparing files is essential when validating changes, detecting duplicates, or ensuring data integrity. The file-worker library provides utilities to compare files based on various attributes such as name, extension, size, last modified date, absolute path, and content.

Imagine you are building a version control system where you need to determine if two files are identical or detect minor differences. This library helps you accomplish this efficiently.

Features Overview

  • Compare files by attributes like size, extension, and modification date.
  • Perform byte-by-byte and line-by-line content comparison.
  • Detect duplicate files within a directory.
  • Validate file equality based on custom criteria.

Getting Started

For installation and dependencies, refer to the Getting Started guide.


Comparing Files with CompareFileExtensions

The CompareFileExtensions class provides methods for detailed file comparison.

Example: Comparing Two Files

File file1 = new File("document1.txt");
File file2 = new File("document2.txt");

IFileCompareResultBean result = CompareFileExtensions.compareFiles(file1, file2);

if (result.getNameEquality()) {
    System.out.println("Files have the same name.");
}

if (result.getContentEquality()) {
    System.out.println("Files are identical in content.");
}

Example: Byte-by-Byte Comparison

boolean isEqual = CompareFileExtensions.compareFileContentByBytes(file1, file2).getContentEquality();

System.out.println("Are the files identical? " + isEqual);

Unit Test Coverage

The CompareFileExtensionsTest class verifies these functionalities:

@Test
public void testCompareFiles() throws IOException {
    File file1 = new File("test1.txt");
    File file2 = new File("test2.txt");

    StoreFileExtensions.toFile(file1, "Hello World");
    StoreFileExtensions.toFile(file2, "Hello World");

    IFileCompareResultBean result = CompareFileExtensions.compareFiles(file1, file2);
    assertTrue(result.getContentEquality());
}

Simple File Comparison with SimpleCompareFileExtensions

The SimpleCompareFileExtensions class provides straightforward comparison methods.

Example: Comparing Files by Checksum

boolean isEqual = SimpleCompareFileExtensions.compareFilesByChecksum(file1, file2, MdAlgorithm.MD5);

System.out.println("Are the files identical based on checksum? " + isEqual);

Example: Comparing Files by Extension

boolean sameExtension = SimpleCompareFileExtensions.compareFilesByExtension(file1, file2);

System.out.println("Do the files have the same extension? " + sameExtension);

Unit Test Coverage

The SimpleCompareFileExtensionsTest class ensures correctness:

@Test
public void testCompareFilesByExtension() throws IOException {
    File file1 = new File("test.txt");
    File file2 = new File("test.doc");

    boolean result = SimpleCompareFileExtensions.compareFilesByExtension(file1, file2);
    assertFalse(result);
}

File Comparison Result Beans

The library includes result beans to store file comparison outcomes.

FileCompareResultBean

Stores results of file attribute comparison.

Example:

FileCompareResultBean result = new FileCompareResultBean(file1, file2);
System.out.println("Name equality: " + result.getNameEquality());

FileContentResultBean

Extends FileCompareResultBean to include content comparison.

Example:

FileContentResultBean result = new FileContentResultBean(file1, file2);
System.out.println("Content equality: " + result.getContentEquality());

Unit Test Coverage

The FileCompareResultBeanTest ensures correct behavior:

@Test
public void testEqualsHashcodeAndToString() {
    FileCompareResultBean result1 = new FileCompareResultBean(file1, file2);
    FileCompareResultBean result2 = new FileCompareResultBean(file1, file2);

    assertEquals(result1, result2);
}

Similarly, FileContentResultBeanTest verifies content comparisons.


Finding Duplicate Files

The library helps find duplicate files within a directory.

Example: Finding Duplicate Files

List<IFileCompareResultBean> duplicates = CompareFileExtensions.findEqualFiles(new File("documents"));

for (IFileCompareResultBean duplicate : duplicates) {
    System.out.println("Duplicate found: " + duplicate.getSourceFile().getName());
}

Example: Finding Files with Identical Content

List<IFileContentResultBean> identicalFiles = CompareFileExtensions.findEqualFilesWithSameContent(new File("data"));

for (IFileContentResultBean file : identicalFiles) {
    System.out.println("Identical file found: " + file.getSourceFile().getName());
}

Unit Test Coverage

The CompareFileExtensionsTest ensures duplicate detection works:

@Test
public void testFindEqualFiles() throws IOException {
    File dir = new File("testDir");
    StoreFileExtensions.toFile(new File(dir, "file1.txt"), "Same content");
    StoreFileExtensions.toFile(new File(dir, "file2.txt"), "Same content");

    List<IFileCompareResultBean> results = CompareFileExtensions.findEqualFiles(dir);
    assertEquals(1, results.size());
}

Conclusion

The file-worker library provides an extensive toolkit for file comparison. Whether you need simple filename comparisons or deep content analysis, these utilities offer a robust and efficient solution.

Start using it today to improve your file management and validation workflows!

Clone this wiki locally