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

标签 java jar nio2

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

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 可以还没有“开箱即用”。

最佳答案

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

关于java - 相当于 InputStream 或 Reader 的 Files.readAllLines()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282457/

相关文章:

java - 获取整数中设置位的位置

windows - 提取并创建包含 aux/aux.* 的 .jar 存档

java - 列出多个jar文件的内容

java eclipse indigo 执行可执行 jar 时出现问题(属性文件位于项目的外部文件夹中)

java - 使用 Files.newBufferedReader() 读取文件和直接构造读取器的不同结果

java - 如何制作具有以下签名 '(x OR y) AND z'的spring data自定义查询方法

java - 在Java绘图中添加标签

构造函数链中的 Java 方法调用

java - Nio2 watch 服务

java - 如何防止 java FileTreeWalker 过早失败