Scalaで静的リソースをjarに同梱し、あるいはjarに同梱したリソースファイルを利用する方法です。
1. 同梱する方法
以下のようなsbtの標準的なディレクトリ構成の場合、src/main/resources以下に配置したファイルはjarファイルに同梱されます。
hogeproj/ +- src/ | +- main/ | | +- java/ | | +- resources/ | | +- scala/ | +- test/ +- project/ ...(略)
2. 同梱したリソースファイルを利用する
Javaの方法と同様で、以下のようにしてInputStreamを取得します。
val is = getClass.getClassLoader.getResourceAsStream("hogehoge.txt")
3. サンプル
プロジェクトの構造
hogeproj/ +- src/ | +- main/ | | +- resources/ | | +- hogehoge.txt | | +- scala/ | | +- Main.scala | +- test/ +- project/ | ...(略)
hogehoge.txt
hoge hoge fuga
Main.scala
import java.io._ object Test { def using[A](br: BufferedReader)(body: Iterator[String] => A): A = { try { body(Iterator.continually(br.readLine).takeWhile(_ != null)) } finally { br.close } } def main(args: Array[String]) { using(new BufferedReader(new InputStreamReader( getClass.getClassLoader.getResourceAsStream("hogehoge.txt")))) { lines => lines foreach println } } }
実行結果
[info] Running Test hoge hoge fuga [success] Total time: 0 s, completed 2016/04/13 15:32:39