2013-04-15 8 views
10

私のコードの.jar実行中:。getResourceAsStreamファイルパス

BufferedInputStream bis = 
    new BufferedInputStream(getClass().getResourceAsStream("playerhit.mp3")); 

MP3.classが、私がの.jarとしてこれを実行しているで実行されているようplayerhit.mp3ファイルが同じパッケージ内にあるときにこのコードは正常に動作します。もし私が/src/data/audio/playerhit.mp3のようなものにファイルパスを変更しても、それはもう動作しません。 .jarとして実行している間、パッケージのルートとは異なるファイルパスにアクセスすることはできますか?

+0

は、ビルド時にクラスパスにコピーされた 'playerhit.mp3'はありますか?あなたはビルドに何を使用しますか?Ant、Maven、...? –

+0

私はそうは思わない...そして私は構築するためにネットビーンズを使用しています。 – user2281673

+0

"playerhit.mp3"の代わりに "data/audio/playerhit.mp3"を使用しましたか? – NINCOMPOOP

答えて

6

Javadoc for getResourceAsStream(...)をご覧ください。

引数が/で始まる場合、リソースの絶対名は/に続く名前の部分です。それ以外の場合は、絶対名は次の形式になります。 modified_package_name/name modified_package_name.の代わりに/のこのオブジェクトのパッケージ名です。

したがって、playerhit.mp3がパッケージ構造のルートにある場合は、/playerhit.mp3として参照する必要があります。 /src/data/audio/の場合は、おそらく/data/audio/playerhit.mp3を使用しますが、JARファイルの内容を確認してください。

+0

これは/data/audio/playerhit.mp3です。私は "/ data/audio /"を使ってみましたが、netbeansから直接実行しても動作しませんでした。 "./data/audio"はotherjiveで動作しますが、.jarからは動作しません – user2281673

+0

Netbeansのクラスパス上の 'data'フォルダはありますか? 'getResourceAsStream()'メソッドは、クラスパス上のリソースだけをロードします。 – mthmulders

+1

今、私は愚かな気分です。パスを単に "data/audio/filename.mp3"としてスラッシュやドットなしで使用した後、私はそれを動作させました。乾杯、少なくともこれは他人を助けることを願って – user2281673

0

ファイルが実際にjarファイルにあるかどうか最初にチェックします。

瓶の中の場所を確認してください。

相対パス:現在のパッケージ

絶対パス:jarファイルのルート