Подтвердить что ты не робот

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

У меня есть файл, который я читал в 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 уже не могут это сделать из окна ".

4b9b3361

Ответ 1

An 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());
}

Ответ 2

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

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