【问题标题】:How to use a folder which is in the same Project without adding it to the classpath?如何使用同一项目中的文件夹而不将其添加到类路径中?
【发布时间】:2016-12-23 04:34:22
【问题描述】:

我有一个插件项目。

它的结构是这样的:

  • 项目名称

      • MyCode.java
    • CSS
    • 图标
    • 我的文件夹

所以,我想利用这个 myFolder 作为 MyCode.java 文件中的资源。

我如何找到文件夹myFolder 将其添加到类路径?

使用 getClass().getResource("myFolder") 需要 myFolder 在类路径中,对吗?

我也不能使用

new File(MyCode.class.getProtectionDomain().getCodeSource().getLocation().getFile()).getParent()

获取项目名称,因为上面一行的输出会根据它所使用的系统而改变,对吧?

【问题讨论】:

  • 为什么要将 myFolder 排除在类路径之外?这就像查找没有参考点的文件夹一样。
  • @asg 因为如果我将它包含在类路径中,该文件夹会出错,因为它没有合法的文件扩展名。因此,如果我将该文件夹作为资源,我可以编辑文件名及其扩展名。
  • 我的意思是,myFolder 还有其他没有合法文件扩展名的文件和文件夹
  • 如何将 myFolder 打包为一个完全不同的实体(如 Jar)并使其可用于您的插件?
  • 哦,好的,你能告诉我怎么做吗?如何使其对插件可用?

标签: java eclipse eclipse-plugin eclipse-rcp


【解决方案1】:

对于 Eclipse 插件,您只需将文件夹添加到插件的 build.properties

然后您可以使用FileLocator 类访问文件夹的内容:

Bundle bundle = .... your plugin's bundle

IPath path = new Path("myFolder/xxxxxx");

URL url = FileLocator.find(bundle, path, null);

URL fileUrl = FileLocator.toFileURL(url);

来自FileLocator.find 的 URL 使用特殊的 Eclipse 协议,但如果您只想调用 openStream 也可以使用。

FileLocator.toFileURL 中的 URL 可用于将对象作为文件访问。调用它可能会导致 Eclipse 将插件 jar 解压到一个临时位置。

【讨论】:

    猜你喜欢
    • 2019-12-22
    • 2014-03-27
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多