2016-07-01 9 views
0

scalaコードとは異なるディレクトリにあるファイルにアクセスするsbtとscalaを使用する際に問題があります。私は、以下に示す典型的なsbtディレクトリレイアウトを持っています。sbtレイアウトを使用してscalaソースからresourcesディレクトリにあるファイルにアクセスする方法

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" 

は、私は高く評価され、私が行方不明ですし、エラーに

[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 wb = ImageIO.read(new File(this.white_b)) 

で画像をロードしようとしています。ありがとう! :\

EDIT:

だから、この混乱アップコードは一度jarファイルが作成されます
val white_b = "target/scala-2.11/classes/board/ew.gif" 

、私はリソースを使用していたsbtコンソールを使用している場合

どうやらあなたはそれをこのようにアクセスする必要が違う?

答えて

1

ただYourClassHereの代わりに自分のクラスの名前を置き換え、この

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

を試してみてください。

sbtプロジェクトレイアウトでは、src/main/resourcesはクラスパスのルートにあります。クラスパスのルートからgifファイルの絶対パスを使用できます(src/main/resourcesがルートにある場合、gifファイルの絶対パスは "/board/ew.gif"です)。

あなたが試していたのは相対パスであり、いつもあなたのプログラムの作業ディレクトリを参照しています。

+0

完璧に機能しました!ありがとうございました! – trevercodes

関連する問題