2012-03-29 22 views
1

私はこれを見てきましたが、わかりません。JARファイルをパッケージ化して正しいディレクトリに移動する

私はMidiライブラリを使用するJavaでアプリケーションを作成しています。このアプリケーションを実行するには、ユーザーがlib/audioのJREインストールフォルダにSoundBankファイル(soundbank.gm)を持っている必要があります。私はユーザーがこれを理解しなくてもいいようにしたいので、サウンドバンクをアプリケーションのリソースとしてパッケージ化して、アプリケーションが起動されたらプログラムで正しいディレクトリに移動することができればと思っていましたそこにはなかった。

まずは、JARのようにリソースをパッケージ化する方法を知る必要があります。次に、リソースを別のディレクトリにコピーする方法を知る必要があります。私は普通のファイルをコピーする方法を知っていますが、私はJARのファイルにどうやってアクセスできるか分かりません。

ご協力いただければ幸いです。私はRunnable JARをエクスポートするためにEclipse BTWを使用しています。

編集:私は、私がファイルをJARにパッケージ化していない理由は、私がeclipseのソースフォルダとして宣言しなかったためだと分かった。今、Javaでそのファイルにアクセスする方法は? JAR名を単にフォルダ名として扱うことはできますか?リソースは、あなたのクラスと同じパッケージ内にある場合

getClass().getResourseasStream("path/to/resource"); 

はあなただけせずにリソース名を必要とする:リソースはJARファイルにパッケージ(または単にどこかのクラスパスで)、Javaアプリケーションから使用できアクセスするためには

+0

これはいくつかのガイダンスを提供します:http://www.cefns.nau.edu/~edo/Classes/CS477_WWW/Docs/pack_resources_in_jar.html。 –

答えて

2

一つの直接的な方法を使用することができますストリームとしてあなたのjavaリソースにアクセスして、例えばコモンズのIOUtilsユーティリティクラスを使用してそれをコピーします。

InputStream is = MyInstallerClass.class.getResourceAsStream("/path/to/my/resource"); 
OutputStream os = new FileOutputStream("/path/to/install/directory"); 
org.apache.commons.io.IOUtils.copy(is,os); 
2

リソースが別のパッケージにある場合は絶対パスを使用できます。 Class.getResourseAsStream()のjavadocを参照してください。ストリームを取得したら、ストリームから読み込むことができます。通常どんなストリームでもそうですが、それをコピーします。

1

あなたのJARの "resources"の下にsoundback.gmをパッケージするとしましょう。

それから...

ClassLoader cl = this.getClass().getClassLoader(); 
InputStream is = cl.getResourceAsStream("resources/soundback.gm"); 

あなたは、この経由でファイルにそのInputStreamを変換することができ...そのファイルにアクセスするには、次のことの

OutputStream out = new FileOutputStream(new File("/lib/audio/soundback.gm")); 

int read = 0; 
byte[] bytes = new byte[1024]; 

while ((read = is.read(bytes)) != -1) { 
    out.write(bytes, 0, read); 
} 

is.close(); 
out.flush(); 
out.close(); 
関連する問題