Одиночный поток Java 8‹String› из содержимого папки

Новичок в Java 8 и практикую Streams и Lambdas.

Я пытаюсь создать Stream<String> из содержимого файлов папки. Это то, что я безуспешно пробовал:

Stream<String> lineStream = Files.walk(Paths.get("resources")).flatMap(Files::lines);

Компилятор кричит, что я не ловлю IOException, даже если у меня есть предложение throws. Кто-нибудь может мне это объяснить?

Мне удалось распечатать все интересующие меня файлы со следующим:

Files.walk(Paths.get("resources"))
    .map(Path::toFile)
    .filter(File::isFile)
    .forEach(System.out::println);

Как мне получить Stream<String>, где каждая String является строкой файлов, напечатанных кодом выше?


person Marsellus Wallace    schedule 22.09.2014    source источник
comment
НЕ ЗАКРЫВАЙТЕ! Помимо лямбда-выражения, вызывающего проверенное исключение, является ли это лучшим способом объединения потоков из нескольких файлов? Есть ли более лаконичный способ? Что делать, если некоторые файлы являются папками?   -  person Marsellus Wallace    schedule 23.09.2014
comment
В нынешнем виде вопрос в основном касается работы с IOException, который, кажется, хорошо освещен другими вопросами и ответами. Если у вас есть дополнительные вопросы, вы можете отредактировать этот вопрос, сделав его более конкретным, или просто задать другой вопрос.   -  person Stuart Marks    schedule 23.09.2014
comment
@Gevorg: да, flatMap - это правильный способ объединения потоков. Чтобы предварительно отфильтровать поток Path, вы должны узнать о Files::isRegularFile   -  person Holger    schedule 25.09.2014