无法从 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 中的资源文件夹中读取文件的主要内容,如果未能解决你的问题,请参考以下文章