read file from inputstream java 8




эквивалентно Files.readAllLines() для InputStream или Reader? (2)

У меня есть файл, который я читал в List с помощью следующего метода:

List<String> doc = java.nio.file.Files.readAllLines(new File("/path/to/src/resources/citylist.csv").toPath(), StandardCharsets.UTF_8);

Есть ли какой-нибудь хороший (однострочный) Java 7/8 / nio2 способ реализовать тот же навык с файлом, который находится внутри исполняемого Jar (и, по-видимому, его нужно читать с помощью InputStream)? Возможно, способ открыть InputStream через загрузчик классов, а затем каким-то образом принудить / преобразовать / обернуть его в объект Path? Или какой-то новый подкласс InputStream или Reader, который содержит эквивалент File.readAllLines (...)?

Я знаю, что могу сделать это традиционным способом на полстранице кода или через какую-то внешнюю библиотеку ... но прежде чем я это сделаю, я хочу убедиться, что последние выпуски Java уже не могут сделать это «из коробки» ».


Вы можете использовать Apache Commons IOUtils#readLines :

List<String> doc = IOUtils.readLines(inputStream, StandardCharsets.UTF_8);


InputStream представляет поток байтов. Эти байты не обязательно образуют (текстовое) содержимое, которое можно читать по строкам.

Если вы знаете, что InputStream можно интерпретировать как текст, вы можете обернуть его в InputStreamReader и использовать BufferedReader#lines() чтобы потреблять его по очереди.

try (InputStream resource = Example.class.getResourceAsStream("resource")) {
  List<String> doc =
      new BufferedReader(new InputStreamReader(resource,
          StandardCharsets.UTF_8)).lines().collect(Collectors.toList());
}




nio2