1. import java.io.File;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.Comparator;
  5. import java.util.List;
  6. class DirectoryComparator {
  7. /**
  8. * Compares two directories and validates their contents.
  9. * @param dir1 The first directory to compare.
  10. * @param dir2 The second directory to compare.
  11. * @return True if the directories are identical, false otherwise.
  12. */
  13. public static boolean compareDirectories(File dir1, File dir2) {
  14. // Check if either directory is null or invalid
  15. if (dir1 == null || dir2 == null || !dir1.exists() || !dir2.exists()) {
  16. return false;
  17. }
  18. // Check if both are directories
  19. if (!dir1.isDirectory() || !dir2.isDirectory()) {
  20. return false;
  21. }
  22. // Compare files in both directories
  23. List<String> files1 = getFiles(dir1);
  24. List<String> files2 = getFiles(dir2);
  25. // Compare the number of files
  26. if (files1.size() != files2.size()) {
  27. return false;
  28. }
  29. // Sort the file lists to ensure consistent comparison
  30. Collections.sort(files1);
  31. Collections.sort(files2);
  32. // Compare file names
  33. for (int i = 0; i < files1.size(); i++) {
  34. if (!files1.get(i).equals(files2.get(i))) {
  35. return false;
  36. }
  37. }
  38. return true;
  39. }
  40. /**
  41. * Retrieves a list of files from a directory.
  42. * @param dir The directory to retrieve files from.
  43. * @return A list of file names.
  44. */
  45. private static List<String> getFiles(File dir) {
  46. List<String> files = new ArrayList<>();
  47. File[] filesArray = dir.listFiles();
  48. if (filesArray != null) {
  49. for (File file : filesArray) {
  50. if (file.isFile()) {
  51. files.add(file.getName());
  52. }
  53. }
  54. }
  55. return files;
  56. }
  57. public static void main(String[] args) {
  58. // Example usage
  59. File dir1 = new File("dir1");
  60. File dir2 = new File("dir2");
  61. // Create sample directories and files for testing
  62. File dir3 = new File("dir3");
  63. dir3.mkdir();
  64. File file1 = new File(dir3, "file1.txt");
  65. file1.createNewFile();
  66. File file2 = new File(dir3, "file2.txt");
  67. file2.createNewFile();
  68. System.out.println("Comparing dir1 and dir3: " + compareDirectories(dir1, dir3)); // Expected: false
  69. System.out.println("Comparing dir3 and dir3: " + compareDirectories(dir3, dir3)); // Expected: true
  70. }
  71. }

Add your comment