### Question:
FileIterable { public static FluentIterable<Path> fileTreeWalker(final Path root) { return FluentIterable.from(Iterables.concat(groupFilesByDir(root))); } private  FileIterable(); static FluentIterable<Path> fileTreeWalker(final Path root); static Iterable<Path> toPaths(File[] files); static Iterable<Path> toPaths(Iterable<File> files); static Iterable<File> toFiles(Iterable<Path> files); static FluentIterable<KeyedIterable<Path, Path>> groupFilesByDir(final Path root); static FluentIterable<String> lines(final Path path); static FluentIterable<String> unzipLines(final Path path, final Charset cs); static Function<? super Iterable<F>, Iterable<T>> bind(final Function<? super F, Iterable<T>> f); static Function<? super Iterable<F>, Iterable<T>> lift(final Function<F, T> f);  }### Answer:
@Test public void testWalk() { Path root = new File("ftp.ncdc.noaa.gov/pub/data/gsod/1988").toPath(); Iterable<Path> paths = FileIterable.fileTreeWalker(root); for(Path p : paths) { System.err.println(p); } List<Path> results = Lists.newArrayList(); Iterables.addAll(results, paths); assertEquals(6,results.size()); }