我需要在绝对位置创建IFolder。
我通常有一个在工作区中为我执行“构建”(或至少称为“构建”)的类。生成目标文件夹的IFolder由以下方法返回:

public IFolder getTargetFolder(IProject project){
    return project.getFolder("build");
}


现在,我为“部署”创建了一个子类(放入具有绝对标识符的目录中)。该子类包含相同的功能,但getTargetfolder例程应如下所示:

@Override
public IFolder getTargetFolder(IProject project){
    IPath path = new Path("M:\\Path\\To\\My\\Deployment\\Directory\\");
    IFolder target = project.getFolder(path);
    return target;
}


但是,我遇到了问题,并且似乎没有找到该文件夹​​的句柄,并且说文件夹(<ProjectRoot>/Path/To/My/Deployment/Directory)不存在的异常。如何指定这不应该是相对路径?

最佳答案

指定给project.getFolder()的名称必须是成员文件夹的名称(请参阅JavaDoc)。
您无法使用工作区外部的Resources API访问文件或文件夹。但是,如果M:\\...路径位于属于工作空间的项目中,则可以通过IWorkspaceRoot#getContainerForLocation()解析文件夹。

例如:

IContainer container = project.getWorkspace().getRoot().getContainerForLocation( "M:\\..." );


返回的container可以是IProjectIFolder。但是请注意,返回的容器不一定位于project内。

可以在Resources and the file system中找到更多信息。

09-27 14:44