import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class DirectoryComparator {
/**
* Compares two directories and validates their contents.
* @param dir1 The first directory to compare.
* @param dir2 The second directory to compare.
* @return True if the directories are identical, false otherwise.
*/
public static boolean compareDirectories(File dir1, File dir2) {
// Check if either directory is null or invalid
if (dir1 == null || dir2 == null || !dir1.exists() || !dir2.exists()) {
return false;
}
// Check if both are directories
if (!dir1.isDirectory() || !dir2.isDirectory()) {
return false;
}
// Compare files in both directories
List<String> files1 = getFiles(dir1);
List<String> files2 = getFiles(dir2);
// Compare the number of files
if (files1.size() != files2.size()) {
return false;
}
// Sort the file lists to ensure consistent comparison
Collections.sort(files1);
Collections.sort(files2);
// Compare file names
for (int i = 0; i < files1.size(); i++) {
if (!files1.get(i).equals(files2.get(i))) {
return false;
}
}
return true;
}
/**
* Retrieves a list of files from a directory.
* @param dir The directory to retrieve files from.
* @return A list of file names.
*/
private static List<String> getFiles(File dir) {
List<String> files = new ArrayList<>();
File[] filesArray = dir.listFiles();
if (filesArray != null) {
for (File file : filesArray) {
if (file.isFile()) {
files.add(file.getName());
}
}
}
return files;
}
public static void main(String[] args) {
// Example usage
File dir1 = new File("dir1");
File dir2 = new File("dir2");
// Create sample directories and files for testing
File dir3 = new File("dir3");
dir3.mkdir();
File file1 = new File(dir3, "file1.txt");
file1.createNewFile();
File file2 = new File(dir3, "file2.txt");
file2.createNewFile();
System.out.println("Comparing dir1 and dir3: " + compareDirectories(dir1, dir3)); // Expected: false
System.out.println("Comparing dir3 and dir3: " + compareDirectories(dir3, dir3)); // Expected: true
}
}
Add your comment