Возникла необходимость сравнить две директории по содержимому. Готового решения гугл не подсказал, пришлось городить собственное решение.
boolean compareDirectories(File dir1, File dir2) throws FileNotFoundException { /* Папок нет, разговора нет */ if (!dir1.exists()) { throw new FileNotFoundException(dir1.getAbsolutePath()); } if (!dir2.exists()) { throw new FileNotFoundException(dir2.getAbsolutePath()); } /* Аргументы либо оба директории, либо оба файлы. Иначе не схожи. */ if (dir1.isDirectory() != dir2.isDirectory()) { return false; } /* * Если первый аргумент файл, а предыдущая проверка метод не завершила, * то сравниваем аргументы как файлы. */ if (dir1.isFile()) { return compareFilesByName(dir1, dir2); } File[] files1 = dir1.listFiles(); // Здесь жду подвоха. Не факт, что массивы File[] files2 = dir2.listFiles(); // сформируются в одинаковом порядке. // Возможно нужна предварительная сортировка. if (files1.length != files2.length) { return false; } for (int i = 0; i < files1.length; i++) { File f1 = files1[i]; File f2 = files2[i]; /* Рекурсивный вызов */ if (!compareDirectories(f1, f2)) { return false; } } return true; } /* * Критерий совпадения файлов может быть разным. * Например, совпадение имен. */ boolean compareFilesByName(File file1, File file2) { return file1.getName().toLowerCase() .equals(file2.getName().toLowerCase()); }
Немає коментарів:
Дописати коментар