Search on the blog

2014年4月8日火曜日

クラスローダーからリソースを取得する


 JavaでOpenCVを動かして遊んでいたら、

getClass().getResource("ファイル名").getPath()

のようにしてファイルのパスを取得しているサンプルがあった。これ何だろうなーと思って調べてみた。

Mat image = Highgui.imread("lena.png");

でいいんじゃないの?と思った。しかし、上のように直接ファイルパスを書いてしまうと、このファイルパスはカレントディレクトリに依存してしまう。
よって、想定外のディレクトリからプログラムを実行する(※)と、ファイルを見つけることが出来なくなってしまう。

※一個上のディレクトリ階層からプログラムを実行する場合など。より実用的な例としては、jarにまとめて実行したり、サーブレット上でプログラムを実行したりする場合。

これに対して、

Mat image = Highgui.imread(getClass().getResource("/lena.png").getPath());

のようにしておけば、クラスパスからリソースが検索されるため、カレントディレクトリには影響しない。

0 件のコメント:

コメントを投稿