1. import java.io.File;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class DirectoryProcessor {
  5. /**
  6. * Processes a directory structure recursively.
  7. * @param rootDir The root directory to start processing from.
  8. * @param processFile A callback function to process each file.
  9. * @param processDir A callback function to process each directory.
  10. */
  11. public static void processDirectory(File rootDir, ProcessFile processFile, ProcessDirectory processDir) {
  12. if (!rootDir.exists() || !rootDir.isDirectory()) {
  13. return; // Handle invalid input
  14. }
  15. File[] files = rootDir.listFiles();
  16. if (files != null) {
  17. for (File file : files) {
  18. if (file.isFile()) {
  19. processFile.process(file); // Process file
  20. } else if (file.isDirectory()) {
  21. processDir.process(file); // Process directory
  22. processDirectory(file, processFile, processDir); // Recursive call
  23. }
  24. }
  25. }
  26. }
  27. /**
  28. * Interface for processing files.
  29. */
  30. public interface ProcessFile {
  31. void process(File file);
  32. }
  33. /**
  34. * Interface for processing directories.
  35. */
  36. public interface ProcessDirectory {
  37. void process(File dir);
  38. }
  39. public static void main(String[] args) {
  40. // Example usage:
  41. File rootDirectory = new File("test_dir"); // Replace with your actual directory
  42. // Create test directory structure if it doesn't exist
  43. File testDir = new File("test_dir");
  44. if (!testDir.exists()) {
  45. testDir.mkdir();
  46. File subdir1 = new File("test_dir/subdir1");
  47. subdir1.mkdir();
  48. File subdir2 = new File("test_dir/subdir2");
  49. subdir2.mkdir();
  50. File file1 = new File("test_dir/file1.txt");
  51. file1.createNewFile();
  52. File file2 = new File("test_dir/subdir1/file2.txt");
  53. file2.createNewFile();
  54. }
  55. ProcessFile fileProcessor = (file) -> {
  56. System.out.println("Processing file: " + file.getAbsolutePath());
  57. };
  58. ProcessDirectory directoryProcessor = (dir) -> {
  59. System.out.println("Processing directory: " + dir.getAbsolutePath());
  60. };
  61. processDirectory(rootDirectory, fileProcessor, directoryProcessor);
  62. }
  63. }

Add your comment