2017-02-27 65 views
3

我已經安裝使用Maven我的SCALA的項目,現在我寫的測試和需要訪問的資源路徑的子目錄下的文件是這樣的:無法訪問相對路徑文件中斯卡拉測試資源

src/test/resource/abc/123.sql 

現在我做如下:

val relativepath = "/setup/setup/script/test.sql" 
val path = getClass.getResource(relativepath).getPath 
println(path) 

但指向的src/main /資源文件夾,而不是測試資源,任何人有這個想法是什麼,我做錯了什麼?

+0

'path'打印輸出是什麼? – mane

+0

不知道,但不知何故此代碼現在工作正常:),一直在嘗試不同的事情 –

回答

4

就像在Java中一樣,將資源文件放在src/main/resourcessrc/test/resources之間是一個很好的做法,因爲Scala通過檢索資源文​​件提供了一個很好的API。

斯卡拉2.12

import scala.io.Source 
val relativePath = "setup/setup/script/test.sql" 
val sqlFile : Iterator[String] = Source.fromResource(relativePath).getLines 

以前的Scala版本

考慮你把你test.sql文件src/test/resources/setup/setup/script/test.sql下,你可以很容易地通過執行以下操作讀取文件

import scala.io.Source 
val relativePath = "setup/setup/script/test.sql" 
val stream : InputStream = getClass.getResourceAsStream(relativePath) 
val sqlFile : Iterator[String] = Source.fromInputStream(stream).getLines   

這樣做,你甚至可以在src/main/resources相同的相對路徑下把同樣的文件。當試圖在測試中訪問資源文件時,將考慮來自src/test/resources的文件。

我希望這是有幫助的。

+0

我成功的src/main/resources/test.txt,但只要我刪除/ src/main/resources I沒有找到文件的例外 –

+0

在這種情況下,您可以在這裏粘貼當前資源文件的結構嗎?不知道我是否正確理解這一點,但如果您沒有'src/main/resources ... /',並且嘗試從屬於類的類訪問駐留在src/test/resources'中的文件'src/main/scala',它不會工作。另外,這樣做不是一個好習慣。測試資源文件應該僅在測試中使用,旨在定義額外的屬性或覆蓋用於測試目的的主要資源文件,但不是相反。 –

+0

在我的結尾有錯誤,謝謝你的幫助 –