I did not find anything. Therefore, I programmed it myself. It is not very complicated and slow for large files, but it seems to work.
import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.FileVisitor; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributes; import org.junit.Assert; public class AssertFile { private AssertFile() { throw new RuntimeException("This class should not be instantiated"); } public static final void assertPathEqualsRecursively(final Path expected, final Path actual) { Assert.assertNotNull(expected); Assert.assertNotNull(actual); final Path absoluteExpected = expected.toAbsolutePath(); final Path absoluteActual = actual.toAbsolutePath(); try { Files.walkFileTree(expected, new FileVisitor<Path>() { @Override public FileVisitResult preVisitDirectory(Path expectedDir, BasicFileAttributes attrs) throws IOException { Path relativeExpectedDir = absoluteExpected.relativize(expectedDir.toAbsolutePath()); Path actualDir = absoluteActual.resolve(relativeExpectedDir); if (!Files.exists(actualDir)) { Assert.fail(String.format("Directory \'%s\' missing in target.", expectedDir.getFileName())); } Assert.assertEquals(String.format("Directory size of \'%s\' differ. ", relativeExpectedDir), expectedDir.toFile().list().length, actualDir.toFile().list().length); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFile(Path expectedFile, BasicFileAttributes attrs) throws IOException { Path relativeExpectedFile = absoluteExpected.relativize(expectedFile.toAbsolutePath()); Path actualFile = absoluteActual.resolve(relativeExpectedFile); if (!Files.exists(actualFile)) { Assert.fail(String.format("File \'%s\' missing in target.", expectedFile.getFileName())); } Assert.assertEquals(String.format("File size of \'%s\' differ. ", relativeExpectedFile), Files.size(expectedFile), Files.size(actualFile)); Assert.assertArrayEquals(String.format("File content of \'%s\' differ. ", relativeExpectedFile), Files.readAllBytes(expectedFile), Files.readAllBytes(actualFile)); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { Assert.fail(exc.getMessage()); return FileVisitResult.TERMINATE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { return FileVisitResult.CONTINUE; } }); } catch (IOException e) { Assert.fail(e.getMessage()); } } }
Andreas
source share