@Override
  public DirectoryStream<Path> newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) throws IOException {
    DirectoryStream.Filter<? super Path> wrappedFilter = filter != null ? path -> filter.accept(path(path)) : null;
    @SuppressWarnings("resource") DirectoryStream<Path> stream = getProvider(dir).newDirectoryStream(unwrap(dir), wrappedFilter);
    return stream == null ? null : new DirectoryStream<Path>() {
      @Override
      public void close() throws IOException {
        stream.close();
      }

      @Override
      public Iterator<Path> iterator() {
        Iterator<Path> iterator = stream.iterator();
        return new Iterator<Path>() {
          @Override
          public boolean hasNext() {
            return iterator.hasNext();
          }

          @Override
          public Path next() {
            return path(iterator.next());
          }
        };
      }
    };
  }
@Override
  public DirectoryStream<Path> newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter)