Чтобы прочитать файл, я бы использовал Files
.Это довольно просто и предоставляет некоторые методы, которые позволяют легко читать каждую строку:
// Get the path for the file
Path path = Paths.get( "/tmp/files.txt" );
// Read a file a print in console.
Files.lines(path) //get a `Stream<String>`
.forEach(System.out::println);
Теперь, в вашем случае, вам нужно отдельное действие, для каждой строки вы хотите прочитать другой файл.Итак, давайте используем метод, который читает файл и выполняет действие для каждой строки:
public static void readFile(Path path, Consumer<String> action) {
try {
Files.lines(path).forEach(action);
} catch (IOException e) {
System.err.println(e);
}
}
И это будет довольно просто для использования.Для каждой строки первого файла мы вызываем метод для печати каждой строки в консоли: (s) -> readFile(Paths.get(s), System.out::println)
.
Path path = Paths.get( "/tmp/files.txt" );
readFile(path, (s) -> readFile(Paths.get(s), System.out::println));
Это будет рекурсивный вызов с использованием другого действия для печати содержимого.
/ tmp / files.txt
/tmp/file1.txt
/tmp/file2.txt
/tmp/file3.txt
/ tmp / file1.txt
Hello world
/ tmp / file3.txt
Foo bar
Hello world
Foo bar
java.nio.file.NoSuchFileException: /tmp/file2.txt