Java插件开发中如何获取同一项目下的其他资源文件

解决方案
你提到的platform:/resource/开头的URI是Eclipse平台专属的工作区资源定位符,可通过Eclipse核心资源API获取同项目下的其他文件,步骤如下:
- 第一步:将已有URI转换为工作区
IFile对象
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.emf.common.util.URI; // 替换为你实际获取的文件URI URI currentUri = URI.createURI("platform:/resource/orginal.dmodel"); IFile currentFile = ResourcesPlugin.getWorkspace().getRoot() .getFile(new Path(currentUri.toPlatformString(true)));
- 第二步:获取当前文件所属的项目
import org.eclipse.core.resources.IProject; IProject project = currentFile.getProject();
- 第三步:获取另外两个资源文件
如果你明确知道另外两个文件的文件名,可以直接定向获取:
IFile test1File = project.getFile("test1.dmodel"); IFile test2File = project.getFile("test2.dmodel"); // 确认文件存在后即可调用对应API读取内容 if (test1File.exists() && test2File.exists()) { // 你的业务处理逻辑 }
如果你不知道具体文件名,只需要获取同项目下所有同类型(后缀为.dmodel)的其他文件,可以遍历项目资源:
import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.runtime.CoreException; List<IFile> otherDmodelFiles = new ArrayList<>(); try { project.accept(new IResourceVisitor() { @Override public boolean visit(IResource resource) throws CoreException { // 筛选dmodel后缀且不是当前处理的文件 if (resource instanceof IFile && "dmodel".equals(resource.getFileExtension()) && !resource.equals(currentFile)) { otherDmodelFiles.add((IFile) resource); } // 返回true代表继续遍历子目录 return true; } }, IResource.DEPTH_INFINITE, false); } catch (CoreException e) { e.printStackTrace(); }
注意事项
- 以上代码需要在Eclipse插件环境下运行,依赖
org.eclipse.core.resources插件 - 如果需要获取文件的本地磁盘路径,可调用
IFile.getLocation().toOSString()方法获取 - 如果需要读取文件内容,可调用
IFile.getContents()方法获取输入流
内容的提问来源于stack exchange,提问作者Nooooobody0009
相关产品推荐
相关产品推荐

