引用osgi插件中的本地文件夹

时间:2016-07-15 15:14:48

标签: java eclipse osgi osgi-bundle

我想引用一个本地资源文件夹(不是其中的文件),名称为'test',来自我的osgi插件。我在互联网上找到了这两个例子(12):

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();
}

这个对我不起作用,因为FileLocator对象没有被解析(eclipse没有建议解决这个问题)。

第二个片段:

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

这个对我不起作用,因为Platfrom,FileLocator和Path对象都没有解决。

与上述两种方式相比,我可以采用不同的方式引用本地文件夹吗?该文件夹位于根目录下一级(与用于存储jar文件的libs文件夹相同)。

1 个答案:

答案 0 :(得分:4)

捆绑中的资源不必位于文件系统上。 URL有一个特殊的URL方案来反映这一点。假设您可以以任何方式将URL转换为文件,这是一种不好的做法。可以将URL转换为InputStream ...这是您获得的唯一保证。

因此,您应该获取输入流并将其复制到临时文件中。但是,通常在大多数情况下您可以直接使用输入流。

但是,在OSGi中,您可以遍历捆绑包内的文件夹。请看Bundle.findEntries