2010-01-27 67 views
4

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

我不能得到这个文件的位置正确,并不断获取空指针,除非我明确指定文件在系统中的位置。我的问题是该文件在插件项目中,我无法获得它的位置。

在插件的文件位置com.my.plugin /规则/ SETUP.TXT

+0

我不知道插件程序,但如果你想programmiatically访问的东西你必须把它在classpath里面,它是,它必须位于源文件夹内。如果需要,可以有多个(例如,Maven样式的项目结构,至少包含两个文件夹,一个用于java代码,另一个用于资源,即运行时可用的文件)。 – helios 2010-01-27 17:16:47

+0

我会更好地解释一下自己:在任何Java项目中,编译时都必须对某些东西进行编程。因此,您可以获得最终产品中包装的产品。你的java文件将被编译并可用。如果你需要静态文件,你需要将它们放在源文件夹中,不管它是/ src还是不是。您可以将文件移动到/ src或重新配置Java Build Path |来源,在项目属性中。 – helios 2010-01-27 17:19:38

回答

7

要部署的包中加载的资源,你可以做以下的(资源加载需要被包含在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()); 

请注意,这与从工作空间中获取某些内容不同,因为当您的包正在运行时,在工作空间中查找某些内容将参考运行时工作空间,而不是开发工作空间。如果你想从运行时的工作空间的东西,你可以这样访问:

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

假设你有这样的:

  • 工作区/ src目录/ Blah.java
  • 工作区/插件/ commyplugin /规则/ SETUP.TXT

从Blah.java你应该能够做这样的事情:

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

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

我主要猜在这里:)