Scalaのリソースフォルダーからファイルを読み取る
1. 概要
このチュートリアルでは、Scalaのリソースフォルダーからファイルを読み取るためのさまざまなアプローチを学習します。 全体として、ScalaリソースはJavaリソースとまったく同じように機能します。
2. getClass.getResourceの使用
使用できる最初のソリューションは、Javaからのものです。URLを返すClass.getResourceメソッドです。
まず、リソースをsの下に置くことを推奨するJava/Scalaのベストプラクティスに従っていると仮定してみましょう。
val resource: URL = getClass.getResource("<my_resource_name>")
そして、これはリソースのURLを返します。 リソースが見つからなかった場合、URLがnullになる可能性があることを考慮してください。 特定の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固有のソリューションを使用する方法についても説明しました。