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

To include this library in your Java project, add the following dependency:

Gradle Dependency

Replace the variable ${latestVersion} with the current latest version:
Maven Central

Define version in the gradle.properties file:

fileWorkerVersion=${latestVersion}

or in the build.gradle ext area:

    fileWorkerVersion = "${latestVersion}"

Then, add the dependency:

    implementation("io.github.astrapi69:file-worker:$fileWorkerVersion")

Using the libs.versions.toml File

For automatic version updates:

[versions]
file-worker-version=${latestVersion}

[libraries]
file-worker = { module = "io.github.astrapi69:file-worker", version.ref = "file-worker-version" }

Then, add:

    implementation libs.file.worker

Maven Dependency

Maven dependency is now available on Sonatype. Check out the
Sonatype repository
for the latest snapshots and releases.

<properties>
    ...
    <file-worker.version>${latestVersion}</file-worker.version>
    ...
</properties>

<dependencies>
    ...
    <dependency>
        <groupId>io.github.astrapi69</groupId>
        <artifactId>file-worker</artifactId>
        <version>${file-worker.version}</version>
    </dependency>
    ...
</dependencies>

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