我在使用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后,这会搞乱代码,我使用的资源是错误的吗?
答案 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")。
您尝试的是相对路径,它们总是参考您的程序的工作目录。