### Question:
FileIterable { public static FluentIterable<String> lines(final Path path) { return new FluentIterable<String>() { @Override public Iterator<String> iterator() { try { return new LineIterator(new InputStreamReader(new FileInputStream(path.toFile()), StandardCharsets.UTF_8)); } catch (FileNotFoundException e) { throw Throwables.propagate(e); } } }; } 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 testLines() { File file = new File("ftp.ncdc.noaa.gov/pub/data/gsod/1988/722430-12960-1988.op.gz"); Iterable<String> lines = FileIterable.unzipLines(file.toPath(), Charsets.US_ASCII); int count = 0; for(String line : lines ) { System.err.println((++count)+": "+line); } }