2010-10-06 91 views
16

在SBT項目文件夾層次結構中我將我的Scala源代碼放入src/main/scala中,並在src/tests/scala中進行測試。我打算把它放到src/main/resources和src/tests/resources中?什麼是SBT項目中的「資源」文件夾?

+0

可能重複[如何得到W/SBT scalatest內的資源(http://stackoverflow.com/questions/5285898/how-to-get-a-resource-within-scalatest-w-sbt) – Suma 2014-05-06 10:20:42

回答

16

該目錄中的所有內容都被打包到您撥打package時創建的.jar中。

這意味着你可以將它用於圖像,聲音文件,文本,任何不是代碼但是被代碼使用的東西。

+0

謝謝迪倫。你可以鏈接到一個Scala(2.8)代碼示例,我如何使用這些資源呢? – Ivan 2010-10-07 23:57:11

+1

這個重複的問題有一個簡潔的例子:http://stackoverflow.com/questions/5285898/how-to-get-a-resource-within-scalatest-w-sbt – emchristiansen 2011-10-05 00:24:02

8

這裏的複製存儲資源的文本文件到本地文件系統的一個例子:

def copyFileFromResource(source: String, dest: File) { 
    val in = getClass.getResourceAsStream(source) 
    val reader = new java.io.BufferedReader(new java.io.InputStreamReader(in)) 
    val out = new java.io.PrintWriter(new java.io.FileWriter(dest)) 
    var line: Option[String] = None 
    line = Option[String](reader.readLine) 
    while (line != None) { 
     line foreach { out.println } 
     line = Option[String](reader.readLine) 
    } 
    in.close 
    out.flush 
    } 
+0

我打算把什麼作爲「源」參數這裏? src/main/resources中文件的簡短名稱?我想打印一個簡短的內置幫助文件,以防我的程序在沒有參數的情況下被調用。所以,我複製了你的函數體,刪除了dest/out以使用println打印到標準輸出並使用「help.txt」作爲源。這在java.io.Reader中給了我一個NullPointerException。 。 – Ivan 2010-11-12 04:45:45

+1

請參閱http://download.oracle.com/javase/6/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String) – 2010-11-12 11:15:10

+1

我認爲可以使用'reader = io.Source .fromInputStream(in).getLines()','out = new PrintWriter(dest))',那麼你所需要的只是'reader foreach out.println' – 2011-09-12 03:15:20

相關問題