You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Eclipse中检查项目内所有文件是否已保存?

检查Eclipse项目中所有未保存文件的实现方案

刚好我之前在Eclipse RCP项目里处理过类似的需求,给你分享下两种常用的实现思路,适配不同的场景:

场景1:检查项目中已打开且未保存的编辑器文件

这个是你单文件检查逻辑的扩展,核心是遍历工作区中所有打开的编辑器,筛选出属于目标项目且处于dirty状态的文件:

// 假设你已经获取到目标项目的IProject实例(可通过选择服务或其他方式获取)
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IEditorReference[] allEditorRefs = activePage.getEditorReferences();
List<IEditorPart> dirtyProjectEditors = new ArrayList<>();

for (IEditorReference editorRef : allEditorRefs) {
    // 不激活编辑器,避免干扰用户操作
    IEditorPart editor = editorRef.getEditor(false);
    if (editor != null && editor.isDirty()) {
        IEditorInput editorInput = editor.getEditorInput();
        // 只处理文件类型的编辑器输入
        if (editorInput instanceof IFileEditorInput) {
            IFile editedFile = ((IFileEditorInput) editorInput).getFile();
            // 判断文件是否属于目标项目
            if (editedFile.getProject().equals(targetProject)) {
                dirtyProjectEditors.add(editor);
            }
        }
    }
}

if (!dirtyProjectEditors.isEmpty()) {
    MessageDialog.openInformation(
        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
        "扫描提示",
        String.format("项目中有%d个文件未保存,请先保存后再执行扫描。", dirtyProjectEditors.size())
    );
    return false;
}

场景2:检查项目中所有文件(含未打开的)的本地修改

如果你的场景需要覆盖未打开但本地已修改的文件(比如外部编辑器修改后未同步到Eclipse工作区),可以结合资源同步检查:

try {
    // 遍历项目下所有层级的文件资源
    IResource[] allProjectResources = targetProject.members(IResource.DEPTH_INFINITE);
    boolean hasUnsavedLocalChanges = false;

    for (IResource resource : allProjectResources) {
        if (resource instanceof IFile) {
            IFile file = (IFile) resource;
            // 检查文件是否与工作区同步(本地修改未提交/保存)
            if (!file.isSynchronized(IResource.DEPTH_ZERO)) {
                hasUnsavedLocalChanges = true;
                break;
            }
        }
    }

    if (hasUnsavedLocalChanges) {
        MessageDialog.openInformation(
            PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
            "扫描提示",
            "项目中存在未同步的本地修改文件,请先同步或保存后再执行扫描。"
        );
        return false;
    }
} catch (CoreException e) {
    // 处理资源遍历异常,比如权限问题
    e.printStackTrace();
    MessageDialog.openError(
        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
        "错误",
        "检查项目文件状态时发生异常:" + e.getMessage()
    );
    return false;
}

注意事项

  • 如果你还没有获取目标项目的IProject实例,可以通过Eclipse的选择服务(ISelectionService)获取用户选中的项目,或者根据项目名称从工作区查找:ResourcesPlugin.getWorkspace().getRoot().getProject("项目名")。
  • 两种场景可以结合使用,确保覆盖所有未保存/未同步的情况。

内容的提问来源于stack exchange,提问作者Arathi Variar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:18