私はOSGiを初めて使用し、Apache Felix OSGiコンテナで実行するOSGiバンドルを作成しました。 バンドルにファイルリソースが含まれていますが、これはメソッドにjava.io.File
として渡す必要があります。 Fileオブジェクトをインスタンス化するには、 "file"スキームのURIか、文字列としてのパスが必要です。クリーンな方法でそれらのファイルを取り出すにはどうすればよいですか?OSGiバンドル内のファイルにアクセスするにはどうすればよいですか?
context.getBundle().getResource("/myfile")
(コンテキストはタイプorg.osgi.framework.BundleContext
)は、bundle://6.0:0/myfile
というURIを返します。 しかし、このURIは "bundle"スキームを持っているので、File(URI uri)
コンストラクタを使用してFileインスタンスに変換することはできません。
一つは、作業ディレクトリを知り、私のバンドルのbundleIdを悪用した場所へのパスを構築しようとすることができますが、私はこれがベストプラクティスです疑います。
アイデア?
春分は、将来性の方法で、このような変換を行うための特別なユーティリティクラスを持っていますが、私はフェリックスのことは知りません。クリーンなOSGi APIをコーディングする場合は、このファイルをどこかにコピーして、対応するFileオブジェクト(Bundle.getDataFile()ストレージなど)を簡単に取得する必要があります。 –