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

17

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

    
задан Bitbang3r 26.03.2015 в 16:25
источник

2 ответа

30

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());
}
    
ответ дан Sotirios Delimanolis 26.03.2015 в 16:31
источник
9

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

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

ответ дан splintor 22.02.2016 в 10:25
источник