package regressiontest.csv; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public class DirectoryCompare { public static boolean compareDirs(File dir1, File dir2) throws Exception { System.out.println("Comparing '" + dir1.getName() + "' vs '" + dir2.getName() + "'.."); File[] dir1files = dir1.listFiles(); File[] dir2files = dir2.listFiles(); // Test 1: Check if both directories contain an equal number of files if (dir1files.length != dir2files.length) { System.out.println("--> Directories contain an unequal amount of files."); return false; } // Test 2: Check if all filenames of dir 1 are present in dir 2 for (File fileInDir1 : dir1files) { boolean fileNameFoundInDir2 = false; for (File fileInDir2 : dir2files) { if (fileInDir2.getName().equals(fileInDir1.getName())) { fileNameFoundInDir2 = true; } } if (!fileNameFoundInDir2) { System.out.println("--> Filename '" + fileInDir1.getName() + "' was not found in directory 2."); return false; } } // Test 3: Check if all filenames of dir 2 are present in dir 1 for (File fileInDir2 : dir2files) { boolean fileNameFoundInDir1 = false; for (File fileInDir1 : dir1files) { if (fileInDir1.getName().equals(fileInDir2.getName())) { fileNameFoundInDir1 = true; } } if (!fileNameFoundInDir1) { System.out.println("--> Filename '" + fileInDir2.getName() + "' was not found in directory 1."); return false; } } // Test 4: Directories contain the same filenames, so we now read the // files and compare their content. If we encounter a directory, we get // the equivalent from the other dir and call the function recursively. for (File fileInDir1 : dir1files) { for (File fileInDir2 : dir2files) { if (fileInDir1.getName().equals(fileInDir2.getName())) { if (fileInDir1.isDirectory()) { compareDirs(fileInDir1, fileInDir2); } else { boolean fileContentIsEqual = compareFileContent(fileInDir1, fileInDir2); if (!fileContentIsEqual) { System.out.println("--> Directory file contents are unequal."); return false; } } } } } System.out.println("--> Directories are equal."); return true; } public static boolean compareFileContent(File fileInDir1, File fileInDir2) throws Exception { boolean filesAreEqual = true; BufferedReader input1 = new BufferedReader(new FileReader(fileInDir1)); BufferedReader input2 = new BufferedReader(new FileReader(fileInDir2)); try { String line1 = null; String line2 = null; int input1_count = 0; int input2_count = 0; while ((line1 = input1.readLine()) != null) // while ((line1 = input1.readLine()) != null && filesAreEqual) { while ((line2 = input2.readLine()) != null) // while ((line2 = input2.readLine()) != null && filesAreEqual) { if (!line1.equals(line2)) { System.out.println("Difference in files detected:"); System.out.println(" * File 1: " + fileInDir1.getName()); System.out.println(" * File 2: " + fileInDir2.getName()); System.out.println(" * Line in file 1: " + line1); System.out.println(" * Line in file 2: " + line2); filesAreEqual = false; } input2_count++; break; } input1_count++; } if (input1_count > input2_count) { System.out.println("Difference in files detected:"); System.out.println("File 1 contains more lines (" + input1_count + ") than file 2 (" + input2_count + "), files not equal"); filesAreEqual = false; } if (input2_count > input1_count) { System.out.println("Difference in files detected:"); System.out.println("File 2 contains more lines (" + input2_count + ")than file 1 (" + input1_count + "), files not equal"); filesAreEqual = false; } } catch (Exception e) { e.printStackTrace(); throw e; } finally { input1.close(); input2.close(); } return filesAreEqual; } }