我想引用一个本地资源文件夹(不是其中的文件),名称为'test',来自我的osgi插件。我在互联网上找到了这两个例子(1,2):
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文件夹相同)。
答案 0 :(得分:4)
捆绑中的资源不必位于文件系统上。 URL有一个特殊的URL方案来反映这一点。假设您可以以任何方式将URL转换为文件,这是一种不好的做法。可以将URL转换为InputStream ...这是您获得的唯一保证。
因此,您应该获取输入流并将其复制到临时文件中。但是,通常在大多数情况下您可以直接使用输入流。
但是,在OSGi中,您可以遍历捆绑包内的文件夹。请看Bundle.findEntries。