如何使用sbt布局从scala源访问资源目录中的文件

时间:2016-07-01 05:13:18

标签: java scala sbt

我在使用sbt和scala从scala代码访问不同目录中的文件时遇到问题。我有典型的sbt目录布局,如下所示。

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

现在在我的src / main / scala目录中的代码中,我有需要访问resources / board目录中的图像的代码。所以从sbt控制台执行它我认为它将从目标下的classes目录运行,因此在我的代码中我添加了它。

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)

对我所缺少的任何帮助表示赞赏。谢谢! :\

修改

如果使用sbt console

,显然你必须以这种方式访问​​它
val white_b = "target/scala-2.11/classes/board/ew.gif"

创建一个jar后,这会搞乱代码,我使用的资源是错误的吗?

1 个答案:

答案 0 :(得分:1)

试试这个

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

只需替换您的班级名称代替YourClassHere

在sbt项目布局中,src / main / resources位于类路径的根目录下。您可以使用类路径根目录中的gif文件的绝对路径(如果src / main / resources位于根目录,则gif文件的绝对路径为" /board/ew.gif")。

您尝试的是相对路径,它们总是参考您的程序的工作目录。