在scala中列出资源子目录NullPointerException

时间:2017-05-29 20:45:06

标签: java scala

我正在尝试列出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)
}

1 个答案:

答案 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