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

时间:2015-03-26 15:26:00

标签: java jar nio2

我有一个文件,我通过以下方法读入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对象中?或者是一些包含与File.readAllLines(...)等价的InputStream或Reader的新子类?

我知道我可以以半页代码的传统方式,或通过一些外部库...但在此之前,我想确保最近的Java版本可以“已经开箱即用了”。

2 个答案:

答案 0 :(得分:52)

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

答案 1 :(得分:21)

您可以使用Apache Commons IOUtils#readLines

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