1. 概要

このチュートリアルでは、Scalaのリソースフォルダーからファイルを読み取るためのさまざまなアプローチを学習します。 全体として、ScalaリソースはJavaリソースとまったく同じように機能します。

2. getClass.getResourceの使用

使用できる最初のソリューションは、Javaからのものです。URLを返すClass.getResourceメソッドです。

まず、リソースをsの下に置くことを推奨するJava/Scalaのベストプラクティスに従っていると仮定してみましょう。 rc / main/resources。 その場合、上記の方法を使用してリソースを取得できます。

val resource: URL = getClass.getResource("<my_resource_name>")

そして、これはリソースのURLを返します。 リソースが見つからなかった場合、URLnullになる可能性があることを考慮してください。 特定のURLからファイルを読み取る方法はたくさんあります。 ファイルパスを使用する場合は、URL.getPathを使用できます。

URLの代わりにInputStreamを返すClass.getResourceAsStreamを使用する以前のソリューションの別のバリエーションがあります。 これは、遅延読み込みや、リソースが大量のCPUまたはメモリを必要とする場合に特に役立ちます。

3. ソースを使用する

Scala 2.12以降を使用している場合は、Sourceクラスも使用できます。 ソースは、調査するリソースを読み取る2つの異なる方法を提供します。

3.1. Using Source.fromFile

最初の可能性は、汎用のSource.fromFile を使用し、完全なリソースパスを渡すことです。

val file = scala.io.Source.fromFile("src/main/resources/<my_resource>")

しかし、もっと良い方法があります。

3.2. Source.fromResourceを使用する

専用のメソッドSource.fromResourceを使用して、リソースを読み取ることができます。

val resource = Source.fromResource("<my_resource>")

val lines : Iterator[String] = resource.getLines

また、 getLines メソッドを呼び出すことで、リソースの行を簡単に取得できます。

4. 結論

この記事では、Javaの相互運用性を利用してScalaのリソースを読み取る方法と、Scala固有のソリューションを使用する方法についても説明しました。