import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class DirectoryProcessor {
/**
* Processes a directory structure recursively.
* @param rootDir The root directory to start processing from.
* @param processFile A callback function to process each file.
* @param processDir A callback function to process each directory.
*/
public static void processDirectory(File rootDir, ProcessFile processFile, ProcessDirectory processDir) {
if (!rootDir.exists() || !rootDir.isDirectory()) {
return; // Handle invalid input
}
File[] files = rootDir.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile()) {
processFile.process(file); // Process file
} else if (file.isDirectory()) {
processDir.process(file); // Process directory
processDirectory(file, processFile, processDir); // Recursive call
}
}
}
}
/**
* Interface for processing files.
*/
public interface ProcessFile {
void process(File file);
}
/**
* Interface for processing directories.
*/
public interface ProcessDirectory {
void process(File dir);
}
public static void main(String[] args) {
// Example usage:
File rootDirectory = new File("test_dir"); // Replace with your actual directory
// Create test directory structure if it doesn't exist
File testDir = new File("test_dir");
if (!testDir.exists()) {
testDir.mkdir();
File subdir1 = new File("test_dir/subdir1");
subdir1.mkdir();
File subdir2 = new File("test_dir/subdir2");
subdir2.mkdir();
File file1 = new File("test_dir/file1.txt");
file1.createNewFile();
File file2 = new File("test_dir/subdir1/file2.txt");
file2.createNewFile();
}
ProcessFile fileProcessor = (file) -> {
System.out.println("Processing file: " + file.getAbsolutePath());
};
ProcessDirectory directoryProcessor = (dir) -> {
System.out.println("Processing directory: " + dir.getAbsolutePath());
};
processDirectory(rootDirectory, fileProcessor, directoryProcessor);
}
}
Add your comment