2017-05-29 1 views
0

Ich versuche in meinem resources Verzeichnis in einem Unterverzeichnis alle Dateien aufzulisten, aber ich bin immer ein NullPointerException, weil die LeitungEintrag Ressourcen Unterverzeichnis in scala Nullpointer

val testDataDir = getClass.getResource("/data")

ist java.net.URL = null

Ressourcen Rückkehr Struktur:

/resources 
    /data 
    file1.txt 
    file2.txt 
    fileX.txt 

Mein Code ist bas ed off Code Beispiele für diesen Blogs: here

Dies ist die I-Code-Snippet bin mit:

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

hast du eigentlich eine Klasse erstellen, genannt: val? Was genau versuchen Sie zu bekommen? – Stultuske

+1

Könnte ein Duplikat dieser Frage sein: https://stackoverflow.com/questions/3803326/this-getclass-getclassloader-getresource-and-nullpointerexception – Alexey

+0

Welche Version von Scala verwenden Sie? –

Antwort

1

1) Mit absolutem PfadgetClass.getResource("/src/main/resources/data/")

mit scala REPL geht aus die Wurzel des Projekts, und zu laden 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 

Oder Ladepaket,

scala> val testDataDir = getClass.getResource("/src/main/resources/data") 
testDataDir: java.net.URL = file:/Users/prayagupd/scala_project/src/main/resources/data 

Es ist nicht mit dem Dateinamen nur innerhalb src/main/resources,

scala> val testDataDir = getClass.getResource("fileX.txt") 
testDataDir: java.net.URL = null 

2) Oder Sie setzen können Ihre resources in Classpath (-cp),

funktioniert
scala -cp src/main/resources/ TestResources.scala 

object TestResources {                                          

    def main(args: Array[String]) = {                 
     println("testing resources")                     
     val data = getClass.getResource("/data")               
     println(data)                 
    }                    
} 

Es funktioniert auch in der IDE , Wie es loads from compiled version classpath

val resources = getClass.getResource("/data") 
file:/Users/prayagupd/scala_project/target/test-classes/data