相当于 InputStream 的 Files.readAllLines() 或 Reader?

equivalent to Files.readAllLines() for InputStream or Reader?

我有一个文件,我一直在通过以下方法将其读入列表:

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,然后以某种方式 coerce/transform/wrap 将其转换为 Path 对象的方法?或 InputStream 或 Reader 的一些新子类,其中包含等效于 File.readAllLines(...)?

我知道我可以用半页代码或通过一些外部库以传统方式完成它......但在我这样做之前,我想确保最近发布的 Java 还不能做到 "out of the box".

一个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);