Scalaに1行で、commons-ioなどの外部依存関係を使用せずにクラスパスからファイルを読み取る方法はありますか?
IOUtils.toString(getClass.getClassLoader.getResourceAsStream("file.xml"), "UTF-8")
val text = io.Source.fromInputStream(getClass.getResourceAsStream("file.xml")).mkString
ファイルを確実に閉じたい場合:
val source = io.Source.fromInputStream(getClass.getResourceAsStream("file.xml"))
val text = try source.mkString finally source.close()
ファイルがリソースフォルダーにある場合(その後、クラスパスのルートにあります)、ローダークラスを使用して、クラスパスのルートにあることを確認してください。
これは、コンテンツを取得する場合のコード行です(scala 2.11):)。
val content: String = scala.io.Source.fromInputStream(getClass.getClassLoader.getResourceAsStream("file.xml")).mkString
Scalaの他のバージョンでは、Sourceクラスは他のクラスパスにある可能性があります
リソースのみを取得したい場合:
val resource = getClass.getClassLoader.getResource("file.xml")
Scalaでファイル全体を読み取りますか? @ daniel-spiewakは、@ dacweの応答よりも個人的に好きな少し異なるアプローチを提案しました。
// scala is imported implicitly
import io.Source._
val content = fromInputStream(getClass.getResourceAsStream("file.xml")).mkString
しかし、それがまだワンライナーなのかどうか疑問に思いますか?