2016-07-15 12 views
0

私のosgiプラグインの「test」という名前のローカルリソースフォルダ(その中のファイルではない)を参照したいと考えています。 FileLocatorオブジェクトが解決されていないため(これを解決するために何も日食で推奨されていない)、osgiプラグインでローカルフォルダを参照する

Bundle bundle = Platform.getBundle("de.vogella.example.readfile"); 
URL fileURL = bundle.getEntry("files/test.txt"); 
File file = null; 
try { 
    file = new File(FileLocator.resolve(fileURL).toURI()); 
} catch (URISyntaxException e1) { 
    e1.printStackTrace(); 
} catch (IOException e1) { 
    e1.printStackTrace(); 
} 

この1つは私のために動作しません:私は、インターネット上でこの2つの例(12)を発見しました。

二スニペット:

URL iconUrl = FileLocator.find(Platform.getBundle("myBundle"), new Path("icons/someIcon.png")) 

Platfrom、FileLocatorとパスのオブジェクトが解決アレントので、この1つは、私のために動作しません。

上記の2つの方法よりもローカルフォルダを参照する方法がありますか?このフォルダは、ルートの1レベル下にあります(jarファイルを格納するlibsフォルダと同じです)。

+0

これらの例はEclipseプラグイン専用です - これはEclipseプラグインか汎用OSGiプラグインですか? –

+0

私はそれがActivator.classを持っているので、一般的なosgiバンドルだと思います。 – TheAptKid

+0

Eclipseプラグインにはアクティベータがあります。問題は、これをEclipseプラグインとして実行するか、他のOSGiシステムを使用するかどうかです。 –

答えて

4

バンドル内のリソースをファイルシステム上に配置する必要はありません。 URLにはこれを反映する特別なURLスキームがあります。どのような方法でもURLをファイルに変換できると仮定するのは悪い習慣です。 URLはInputStreamに変換することができます。これはあなたが得る唯一の保証です。

入力ストリームを取得して一時ファイルにコピーする必要があります。しかし、一般的に、ほとんどの場合、入力ストリームを直接使用することができます。

しかし、OSGiでは、バンドル内のフォルダを走査できます。 Bundle.findEntriesをご覧ください。

関連する問題