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




to fileinputstream (3)

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


Answers

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

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

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


Мы наблюдаем некоторую задержку для нескольких транзакций AWS, преобразовывая объект S3 в ByteArray.

Примечание. Объект S3 - это документ PDF (максимальный размер - 3 мб).

Мы используем опцию # 1 (org.apache.commons.io.IOUtils) для преобразования объекта S3 в ByteArray. Мы заметили, что S3 предоставляет метод inbuild IOUtils для преобразования объекта S3 в ByteArray, мы просим вас подтвердить, что является наилучшим способом преобразования объекта S3 в ByteArray, чтобы избежать задержки.

Опция 1:

import org.apache.commons.io.IOUtils;
is = s3object.getObjectContent();
content =IOUtils.toByteArray(is);

Вариант № 2:

import com.amazonaws.util.IOUtils;
is = s3object.getObjectContent();
content =IOUtils.toByteArray(is);

Также дайте мне знать, если у нас есть другой лучший способ конвертировать объект s3 в bytearray





java jar nio2