Java библиотека
MAX ·
Сверяем файлы сборки и находим расхождения!
После копирования приложения можно проверить, что файлы совпадают с исходной сборкой. Напишем небольшую проверку двух каталогов, которая найдёт отсутствующие и изменённые файлы, не загружая их целиком в память.
Обойдём файлы без загрузки всего списка в память и закроем поток после проверки. Символические ссылки отфильтруем через LinkOption.NOFOLLOW_LINKS:
try (Stream files = Files.walk(buildDir)) {
Iterator paths = files.filter(path ->
Files.isRegularFile(path, NOFOLLOW_LINKS)).iterator();
while (paths.hasNext()) compare(paths.next(), buildDir, deployDir);
}
Для каждого файла строим такой же относительный путь в каталоге развёртывания. Это сохраняет структуру вложенных папок:
Path relative = buildDir.relativize(source);
Path deployed = deployDir.resolve(relative);
Отсутствующий файл отмечаем отдельно, иначе проверка совпадения не сможет отличить его от пустого файла:
if (!Files.isRegularFile(deployed)) {
reportMissing(relative);
return;
}
Для существующих файлов используем Files.mismatch. Метод читает содержимое по мере необходимости и возвращает позицию первого различия, а -1 означает полное совпадение:
long offset = Files.mismatch(source, deployed);
if (offset == -1) reportMatch(relative);
else reportDifference(relative, offset);
Можно добавить обратный проход по каталогу развёртывания, если нужно также находить лишние файлы.
Java Библиотека | Мы в Телеграм
