【问题标题】:Retrieve a file from within a folder in the workspace从工作区的文件夹中检索文件
【发布时间】:2011-01-10 01:36:35
【问题描述】:

我的工作区中有一个文件夹,但在“src”之外,其中包含一个需要读取的文件,以便在使用自定义插件向导时设置新文件。

除非我准确指定文件在系统中的位置,否则我无法正确获取此文件的位置并不断获取空指针。我的问题是文件在插件项目中,我无法获取它的位置。

插件中的文件位置是com.my.plugin/rules/setup.txt

【问题讨论】:

  • 我不知道插件编程,但是如果你想以编程方式访问一些东西,你必须把它放在类路径中,它必须在源文件夹中。如果需要,您可以拥有多个文件夹(例如,Maven 风格的项目结构,至少包含两个文件夹,一个用于 java 代码,一个用于资源,即运行时可用的文件)。
  • 我会更好地解释自己:在任何 Java 项目中,您必须编写一些程序才能在编译时工作。因此,您可以获得最终产品中包装的内容。您的 java 文件将被编译并可用。如果您需要静态文件,则需要将它们放在某个源文件夹中,无论是否 /src。您可以将文件移动到 /src 或重新配置 Java 构建路径 |源,在项目属性中。

标签: java eclipse plugins


【解决方案1】:

要从已部署的包中加载资源,您可以执行以下操作(要加载的资源需要包含在您的 build.properties 二进制构建设置中):

Bundle bundle = YourBundleActivator.getDefault().getBundle();
IPath path = new Path("rules/setup.txt");
URL setupUrl = FileLocator.find(bundle, path, Collections.EMPTY_MAP);
File setupFile = new File(FileLocator.toFileURL(setupUrl).toURI());

请注意,这与从工作区获取内容不同,因为当您的包正在运行时,在工作区中查找内容将引用 runtime 工作区,而不是开发工作区。如果您确实需要运行时工作区中的某些内容,可以这样访问它:

IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IResource resourceInRuntimeWorkspace = root.findMember("rules/setup.txt");
File file = new File(resourceInRuntimeWorkspace.getLocationURI());

【讨论】:

    【解决方案2】:

    假设你有类似的东西:

    • workspace/src/Blah.java
    • workspace/plugin/commyplugin/rules/setup.txt

    从 Blah.java 您应该能够执行以下操作:

    URL urlToFile = getClass().getResource("/plugin/commyplugin/rules/setup.txt");
    

    然后从那里创建一个文件或使用 getResourceAsStream 返回一个 InputStream。

    我主要是在这里猜测:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 2021-11-03
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多