PLUGIN_NAME就是插件ID 插件要解开,以文件夹的形式放到Plugins下面,不能以Jar的形式放,那样无法更新properties文件。
/** * 插件配置文件取得. * * @param resourceFilePath * 配置文件在插件中的相对路径 * @return 文件对象 * @throws IOException * 配置文件取得失败 */ private static File getConfigFile(String resourceFilePath) throws IOException {
// 取得资源URL,形式如bundleresource://8.fwk4898828:6/abc.properties URL url = Platform.getBundle(PLUGIN_NAME).getResource(resourceFilePath); if (url == null) { throw new IOException(resourceFilePath + "文件未找到。"); }
// 转为文件对象 File file = null; try {
// 转换为文件路径,如file:/E:/aaa 桌面/plugins/xxx/abc.properties url = FileLocator.resolve(url);
// 路径中可能存在特殊字符(如空格),需要转换为%xx形式,使用URI的构造方法可以自动转换。 // windows文件夹名不允许的字符:\/:*?"<>| // 可能使用的特殊字符:`-=~!@$%^&()_+[]{};',.# // 路径名包含这四个字符“@#%;”时,整个程序不能启动,其它字符都OK URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null); log.debug(resourceFilePath + ":" + uri);
// 通过文件方式存取。插件要导出为目录的形式,不要导出Jar包的形式,后者无法更新配置文件. file = new File(uri); } catch (URISyntaxException e) { throw new IOException(resourceFilePath + "文件取得失败。", e); }
// 返回 return file; }
|