web-dev-qa-db-ja.com

外部依存なしでクラスパスからファイルを読み取る方法は?

Scalaに1行で、commons-ioなどの外部依存関係を使用せずにクラスパスからファイルを読み取る方法はありますか?

IOUtils.toString(getClass.getClassLoader.getResourceAsStream("file.xml"), "UTF-8")
31
mbdev
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()
60
dacwe

ファイルがリソースフォルダーにある場合(その後、クラスパスのルートにあります)、ローダークラスを使用して、クラスパスのルートにあることを確認してください。

これは、コンテンツを取得する場合のコード行です(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")
6
fhuertas

Scalaでファイル全体を読み取りますか? @ daniel-spiewakは、@ dacweの応答よりも個人的に好きな少し異なるアプローチを提案しました。

// scala is imported implicitly
import io.Source._

val content = fromInputStream(getClass.getResourceAsStream("file.xml")).mkString

しかし、それがまだワンライナーなのかどうか疑問に思いますか?

0
Jacek Laskowski