ho "risolto" (se così si può dire) modificando il metodo scanDir:
codice:
public ArrayList<Record> scanDir(Path directory) throws IOException {
        ArrayList<Record> list = new ArrayList<>();
        Files.walkFileTree(directory, new FileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                File f = file.toFile();
                String ext = FilenameUtils.getExtension(f.getName());
                if (f.isFile() && !ext.equals("aar")) {
                    Record record = new Record(f.getName(), new Tika().detect(f), f.getAbsolutePath());
                    list.add(record);
                }
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult preVisitDirectory(Path t, BasicFileAttributes bfa) throws IOException {
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult visitFileFailed(Path t, IOException ioe) throws IOException {
                System.out.println(t.getFileName());
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult postVisitDirectory(Path t, IOException ioe) throws IOException {
                return FileVisitResult.CONTINUE;
            }
        });
        return list;
    }
usando FileVisitor, e non SimpleFileVisitor, si ha a disposizione il metodo visitFileFailed.
così facendo, il processo continua e riempie cmq la lista.
poi cercherò di capire il perchè di questo errore.