web-dev-qa-db-ja.com

InputStreamまたはReaderのFiles.readAllLines()と同等ですか?

次の方法でリストに読み込んでいるファイルがあります:

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の新しいサブクラス?

私はcouldを半ページのコードで、または外部ライブラリを介して従来の方法で実行することを知っています...しかし、実行する前に、Javaは、「箱から出して」すぐには実行できません。

37
Bitbang3r

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

Apache Commonsを使用できます IOUtils#readLines

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

23
splintor