一尘不染

等同于InputStream或Reader的Files.readAllLines()?

java

我有一个通过以下方法读入列表的文件:

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的最新版本不能“立即使用” ”。


阅读 258

收藏
2020-12-03

共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());
}
2020-12-03