2016-07-01 65 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

相关问题