java - Eclipse 插件 - 刷新 eclipse 项目中的链接文件夹

标签 java eclipse algorithm eclipse-plugin refresh

我正在尝试为 Eclipse 插件实现刷新算法,但找不到处理链接文件夹的方法。

总而言之,我的应用程序中有一些功能可以在我工作的同一个项目中生成一些文件。为了查看这些文件,我通常必须按 F5。不过,我尝试实现一种刷新算法,这样我就不必再按 F5 并自动进行刷新。

这是我的算法的一部分

        File osFile = iPath.toFile();
        if (osFile.exists()) {
            if (osFile.isFile()) {
                IFile[] filesArr = workspaceRoot
                        .findFilesForLocationURI(iPath.toFile().toURI());

                if (filesArr != null && filesArr.length > 0) {
                    for (IFile file : filesArr) {
                        try {
                            file.refreshLocal(IResource.DEPTH_INFINITE,
                                    new NullProgressMonitor());
                        } catch (CoreException e) {
                            Activator.getDefault().log(IStatus.ERROR,
                                    e.getLocalizedMessage(), e);
                        }
                    }
                }
            } else if (osFile.isDirectory()) {
                iPath = iPath.makeRelativeTo(workspaceRoot.getLocation());

                IResource resource = null;
                if (iPath.segmentCount() == 1) {
                    resource = workspaceRoot.getProject(iPath.toString());
                } else {
                    try {
                        resource = workspaceRoot.getFolder(iPath);
                    } catch (Exception e) {
                        Activator.getDefault().log(IStatus.ERROR,
                                e.getLocalizedMessage(), e);
                    }
                }

                try {
                    if (resource != null) {
                        resource.refreshLocal(IResource.DEPTH_INFINITE,
                                new NullProgressMonitor());
                    }
                } catch (CoreException e) {
                    Activator.getDefault().log(IStatus.ERROR,
                            e.getLocalizedMessage(), e);
                }
            }

其中iPath是我要刷新的文件或文件夹的绝对路径(C:......)。

对于单个文件和非链接文件夹,这很有效,但是当涉及到链接文件夹时,它就失败了。问题出在这一行:

iPath = iPath.makeRelativeTo(workspaceRoot.getLocation());

在非链接文件夹中,它会将绝对路径(C:......)转换为 Eclipse 本地路径(MyProject/tmp/destinationFolder),对于链接文件夹,它只会获取绝对路径在操作系统上。

然后是下面一行代码:

resource = workspaceRoot.getFolder(iPath);

将从路径中删除“C:\”并将其连接到一个暂定的 eclipse 路径(产生类似 F/user/desktop/project/folder 的结果)最终指向任何内容。

那么,有人可以帮我重构我的算法以正确处理链接的文件夹吗?可能有一些我不熟悉和遗漏的方法或类,它们可能正好处理这类问题。

最佳答案

IWorkspaceRoot 具有 findContainersForLocationURI,它返回位置 URI 的容器(容器可以是文件夹或项目)。

关于java - Eclipse 插件 - 刷新 eclipse 项目中的链接文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31876112/

相关文章:

java - IdentityHashMap 是否接受碰撞?

java - 如何通过引用让一个Animal对象知道它在哪个Room

java - 如何从整个 jar 导入特定的类?

algorithm - 我可以使用任意指标来搜索 KD 树吗?

java - 格式 EEEE、MMMM d、YYYY h :mm:ss a z 的解析器异常

java - Maven 从多个位置扫描警告类型

java - myeclipse 工作台中的嵌套工作集

c++ - 在eclipse中调试makefile项目

algorithm - 如何检测线段与圆柱相交?

Javascript 文本相似度算法