无法从 Scala 中的资源文件夹中读取文件

Posted

技术标签:

【中文标题】无法从 Scala 中的资源文件夹中读取文件【英文标题】:Cannot read file from resource folder in Scala 【发布时间】:2021-12-31 12:08:57 【问题描述】:

我正在尝试读取位于我的/src/test/resources/data 文件夹中的文件“my_data.txt”。

––– src

  –– main

  –– test

   ––– resources

      ––– data

          ––– my_data.txt

我有以下代码可以做到这一点:

val filename = getClass.getResource("/src/test/resources/data/my_data.txt").getPath

当我编译它时,编译很顺利,但是,当我在鸭子中运行测试时,我收到以下错误消息:

java.lang.NullPointerException
    at (xxxx.scala:128)
    at org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85)
    at org.scalatest.OutcomeOf.outcomeOf$(OutcomeOf.scala:83)
    at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
    at org.scalatest.Transformer.apply(Transformer.scala:22)
    at org.scalatest.Transformer.apply(Transformer.scala:20)
    at org.scalatest.FunSpecLike$$anon$1.apply(FunSpecLike.scala:454)
    at org.scalatest.TestSuite.withFixture(TestSuite.scala:196)
    at org.scalatest.TestSuite.withFixture$(TestSuite.scala:195)
    at org.scalatest.FunSpec.withFixture(FunSpec.scala:1630)
    at org.scalatest.FunSpecLike.invokeWithFixture$1(FunSpecLike.scala:452)
    at org.scalatest.FunSpecLike.$anonfun$runTest$1(FunSpecLike.scala:464)
    at org.scalatest.SuperEngine.runTestImpl(Engine.scala:289)
    at org.scalatest.FunSpecLike.runTest(FunSpecLike.scala:464)
    at org.scalatest.FunSpecLike.runTest$(FunSpecLike.scala:446)


When I try to print the path that I am reading from I got `null` as an output.

又一次尝试

除了上面我尝试了以下代码:

    val ss = scala.io.Source.fromResource("/src/test/resources/data/my_data.txt") ClassLoader.getSystemResource("/src/test/resources/data/my_data.txt").getPath

另外,我在POM 文件中的资源中添加了src/test/resources/data

终于

正如this 提到的,我检查了编译器中是否包含.txt(我正在使用MAC

【问题讨论】:

getClass.getResource("/data/my_data.txt") 工作吗? 正如我上面提到的,它没有。 注意路径本身。我评论了从资源目录(/data/my_data.txt)开始的路径,但是在您的问题中使用了绝对路径。 这就是我的代码中的内容:val fileName = getClass.getResource("/data/my_data.txt").getFile() 【参考方案1】:

好吧,我通过使用getAbsolutePath 获取绝对路径解决了这个问题。我指出test.properties 文件有dataDir。这是我所做的:

properties.load(getClass.getClassLoader.getResourceAsStream("test.properties"))
testDataDirectory = new File(properties.getProperty("dataDir"))
val file = new File(testDataDirectory.getAbsolutePath +"/data/my_data.txt"

for (line <- Source.fromFile(file).getLines) 
   println(line)

这并不意味着这是 “最佳” 方法,但以防万一您遇到类似问题,高于我用来解决它的方法。

【讨论】:

以上是关于无法从 Scala 中的资源文件夹中读取文件的主要内容,如果未能解决你的问题,请参考以下文章

无法从资源中读取文件

如何从 Android Studio 的资源目录中读取 json 文件?

读取资源文件信息

无法读取资源文件夹中的文件 - iOS

用一个例子告诉你 scala中怎样从文件中读取文本行

Apache Drill 无法从 HDFS 读取文件(资源错误:无法创建模式树)