Эквивалентно 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 уже не могут это сделать из окна ".
Ответы
Ответ 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);