2016-04-01 8 views
0

私は、テキストファイルを含むJava jarファイルを持っています。 jarファイル内のJavaコードから、JNAを使用してCライブラリの関数を呼び出しています。テキストファイルへのファイルパスをC関数の1つに渡す必要があり、Cプログラムがそれを読むことができます。Java JARのテキストファイルへのパスをCライブラリに渡しますか?

それはCプログラムではなく、ファイルを読み込む必要があるJavaプログラムですので、私は単純にこれを行うことはできません。

getClass().getResourceAsStream("MyFile.txt"); 

Cプログラムは、私のコントロール下にない、そしてそれは理解していませんjar:file://パス。

どうすればいいですか? jarの内容は自動的にどこかに抽出されますか?どこかでそれを抽出する必要がありますか?権限をどこにでも書くことができない場合はどうしたらいいですか?

+0

可能であれば、私はファイルシステムのどこかに、そのファイルをjarファイルに入れないでください。そうすれば、クライアントコード(あなたのCプログラム)を理解しやすくなります。そして、jarファイルは内部的なものである可能性が高いです(jarファイルの開発者は、このリソースが他の人によって使用されていることをよく知らないかもしれません。これにより、ファイルの更新が容易になります(設定ファイルを更新するためにモジュールをリリースする必要はありません)。 – spi

答えて

2

ファイルは明らかにjar(またはクラスパス)にパックされています。つまり、リソースを意味します。

あなたはURLを取る場合:その後、Cの部分が瓶からそのエントリを解凍する必要があります

"jar:file://...path-to-jar... .jar! ...package-path-of-class.../MyFile.txt" 

(jarファイルがZIPで)、そして:

getClass().getResource("MyFile.txt"); 

1は次のようにURLを受け取りますあなたは終わった。 「jar:file:/」と気をつけてください。

Cの一部を変更することができない場合は、一時ファイルを作成

Path path = Files.createTempFile("temp_", ".txt"); 
Files.copy(getClass().getResourceAsStream("MyFile.txt", path)); 

これらの関数は、パラメータのadditonal、ファイル属性を持つことができます。 そしてpath.toString()を渡してください。

必要に応じて削除してください。

+1

問題はありませんが、 'Files'にはいくつかの細かいユーティリティー機能があります。 –

関連する問題