2016-07-01 63 views
0

我在使用sbt和scala訪問scala代碼中不同目錄中的文件時遇到問題。我有如下所示的典型sbt目錄佈局。如何使用sbt佈局從scala源訪問資源目錄中的文件

main 
|- build.sbt 
|- project/ 
|- src/ 
    |- main/ 
     |- scala/ 
     |- resources/ 
       |- board 
    |- test/ 
     |- scala/ 
|- target/ 
    |- scala-2-11/ 
     |- classes 
       |- board/ 
       |- com/ 
        |- tgm 
         |- frpoject 

現在我在src /主/斯卡拉目錄的代碼,我有一個需要訪問的資源/ board目錄下的圖像代碼。所以從sbt控制檯執行它我認爲它將從目標下的類目錄運行,所以在我的代碼中,我添加了它。

val white_b = "../../../board/ew.gif" 

沒有工作,所以我試圖從源目錄中如此。

val white_b = "../resources/board/ew.gif" 

我試圖用

val wb = ImageIO.read(new File(this.white_b)) 

我不斷收到錯誤

[error] (run-main-10) javax.imageio.IIOException: Can't read input file! 
javax.imageio.IIOException: Can't read input file! 
    at javax.imageio.ImageIO.read(ImageIO.java:1301) 

任何幫助到我所缺少的是讚賞加載圖像。謝謝! :\

編輯:

顯然你要訪問它這樣,如果使用

val white_b = "target/scala-2.11/classes/board/ew.gif" 

所以將這個爛攤子了代碼一旦創建一個罐子裏,我使用的資源SBT控制檯錯誤?

回答

1

試試這個

val wb = ImageIO.read(classOf[YourClassHere].getResourceAsStream("/board/ew.gif")) 

代替YourClassHere只需更換你的類的名稱。

在sbt項目佈局中,src/main/resources位於類路徑的根目錄下。你可以使用類路徑根目錄下的gif文件的絕對路徑(如果src/main/resources位於根目錄下,gif文件的絕對路徑是「/board/ew.gif」)。

你所嘗試的是相對路徑,它們總是參考你程序的工作目錄。

+0

工作完美!謝謝! – trevercodes

相關問題