Skip to content

File Search Documentation

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

Introduction

Efficiently searching for files within directories is essential for many applications. Whether you need to locate configuration files, find duplicate files, or search for specific patterns, the file-worker library provides robust tools for file and directory searching.

Imagine you are working on a project where you need to find log files with a specific prefix, count files in a directory, or recursively locate files matching a pattern. This library enables these tasks with ease.

Features Overview

  • Locate files based on name, extension, or content.
  • Search directories recursively for matching files.
  • Count files within a directory efficiently.
  • Retrieve project-specific paths dynamically.

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>

Searching for Files with FileSearchExtensions

The FileSearchExtensions class provides static utility methods for finding files.

Example: Searching for Files by Prefix and Extension

File directory = new File("logs");
List<File> logFiles = FileSearchExtensions.findFilesWithPrefixAndExtension(directory, "logfile", "txt");

for (File file : logFiles) {
    System.out.println("Found log file: " + file.getName());
}

Example: Recursive File Search

List<File> allTxtFiles = FileSearchExtensions.findFilesWithPrefixAndExtensionRecursive(directory, "logfile", "txt");

System.out.println("Total log files found: " + allTxtFiles.size());

Unit Test Coverage

The FileSearchExtensionsTest class ensures functionality:

@Test
public void testFindFilesWithPrefixAndExtensionRecursive() {
    File directory = new File("testDir");
    List<File> files = FileSearchExtensions.findFilesWithPrefixAndExtensionRecursive(directory, "logfile", "txt");
    assertEquals(3, files.size());
}

Finding Paths with PathFinder

The PathFinder class helps retrieve project-related paths dynamically.

Example: Getting the Project Directory

File projectRoot = PathFinder.getProjectDirectory();
System.out.println("Project directory: " + projectRoot.getAbsolutePath());

Example: Getting Common Project Folders

File srcMainJava = PathFinder.getSrcMainJavaDir();
System.out.println("Main Java Source Directory: " + srcMainJava.getAbsolutePath());

Unit Test Coverage

@Test
public void testGetProjectDirectory() {
    File projectDir = PathFinder.getProjectDirectory();
    assertTrue(projectDir.exists());
}

Counting Files in a Directory

The library provides methods to count files efficiently.

Example: Counting All Files

long fileCount = FileSearchExtensions.countAllFilesInDirectory(new File("data"), 0, true);

System.out.println("Total files in directory: " + fileCount);

Unit Test Coverage

@Test
public void testCountAllFilesInDirectory() {
    File directory = new File("testDir");
    long count = FileSearchExtensions.countAllFilesInDirectory(directory, 0, true);
    assertTrue(count > 0);
}

Managing Search Attributes with SearchFileAttributesBean

The SearchFileAttributesBean class encapsulates file search attribute flags.

Example: Ignoring Specific File Attributes

SearchFileAttributesBean attributes = SearchFileAttributesBean.builder()
    .ignoreContentEquality(true)
    .ignoreLastModified(true)
    .build();

System.out.println("Ignore content comparison: " + attributes.isIgnoreContentEquality());

Unit Test Coverage

@Test
public void testSearchFileAttributesBean() {
    SearchFileAttributesBean attributes = new SearchFileAttributesBean(true, false, true, false, true);
    assertTrue(attributes.isIgnoreContentEquality());
}

Checking If a File Exists

The library allows checking whether a file exists in a directory.

Example: Checking for a File

boolean fileExists = FileSearchExtensions.containsFile(new File("data"), "config.json");

System.out.println("Config file exists: " + fileExists);

Unit Test Coverage

@Test
public void testContainsFile() {
    File directory = new File("config");
    boolean exists = FileSearchExtensions.containsFile(directory, "settings.xml");
    assertTrue(exists);
}

Conclusion

The file-worker library simplifies file searching and directory traversal, making it a valuable tool for locating, counting, and managing files efficiently.

Start using it today to streamline your file search operations!

Clone this wiki locally