我正在尝试列出resources
目录中某个子目录中的所有文件,但我收到NullPointerException
,因为该行
val testDataDir = getClass.getResource("/data")
正在返回java.net.URL = null
资源结构:
/resources
/data
file1.txt
file2.txt
fileX.txt
我的代码基于此博客的代码示例:here
这是我正在使用的代码段:
val testDataDir = getClass.getResource("/data")
val folder = new File(testDataDir.getPath)
var testDataArr: ListBuffer[String] = new ListBuffer[String]
if (folder.exists && folder.isDirectory) {
folder.listFiles.toList.foreach(file => testDataArr += file.toString)
}
答案 0 :(得分:1)
1)您可以使用绝对路径 getClass.getResource("/src/main/resources/data/")
从项目的根目录使用scala REPL ,并加载src/main/resources/fileX.txt
scala> val appConfig = getClass.getResource("/src/main/resources/fileX.txt")
testDataDir: java.net.URL = file:/Users/prayagupd/scala_project/src/main/resources/fileX.txt
或者,加载包,
scala> val testDataDir = getClass.getResource("/src/main/resources/data")
testDataDir: java.net.URL = file:/Users/prayagupd/scala_project/src/main/resources/data
仅在src/main/resources
,
scala> val testDataDir = getClass.getResource("fileX.txt")
testDataDir: java.net.URL = null
2)或者,您可以在类路径中设置resources
(-cp
),
scala -cp src/main/resources/ TestResources.scala
object TestResources {
def main(args: Array[String]) = {
println("testing resources")
val data = getClass.getResource("/data")
println(data)
}
}
它也可以在IDE中运行,因为loads from compiled version classpath
val resources = getClass.getResource("/data")
file:/Users/prayagupd/scala_project/target/test-classes/data