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

RCP项目中如何在Project Explorer隐藏以点开头的文件夹

解决Project Explorer中隐藏以点开头文件夹的问题

我来帮你搞定这个问题!你的commonFilter配置没生效,大概率是过滤表达式不完整,或者漏了把filter绑定到Project Explorer的关键步骤,下面一步步给你讲清楚正确的配置方式:

1. 补全并修正Common Filter的扩展配置

你的代码片段截断了,先给你一个完整且正确的配置,重点是filterExpression部分:

<extension point="org.eclipse.ui.navigator.navigatorContent">
  <commonFilter
        description="隐藏以点(.)开头的文件夹"
        id="com.xyz.commonFilter.hideDotFolders"
        name="隐藏点前缀文件夹"
        activeByDefault="true">
    <filterExpression>
      <and>
        <!-- 可选:如果只想隐藏文件夹,加上这一行;要隐藏所有点开头资源就去掉 -->
        <test property="org.eclipse.core.resources.type" value="FOLDER"/>
        <!-- 正则匹配以点开头的资源名称,这是核心 -->
        <test property="org.eclipse.core.resources.name" value="^\..*" match="regex"/>
      </and>
    </filterExpression>
  </commonFilter>
</extension>

重点说明:

  • 正则表达式^\..*才是正确匹配以点开头的资源,如果你之前写的是.*,那会匹配所有资源,肯定不对。
  • 加上org.eclipse.core.resources.type的判断,可以只过滤文件夹,避免误隐藏以点开头的文件(比如.gitignore这类你可能想保留的文件)。

2. 必须绑定Filter到Project Explorer Viewer

光定义filter还不够,得让Project Explorer知道要加载这个filter,所以要加一个org.eclipse.ui.navigator.viewer扩展:

<extension point="org.eclipse.ui.navigator.viewer">
  <viewerActionBinding
        viewerId="org.eclipse.ui.navigator.ProjectExplorer">
    <includes>
      <actionExtension pattern="com.xyz.commonFilter.hideDotFolders"/>
    </includes>
  </viewerActionBinding>
</extension>

这里的pattern要和你上面定义的commonFilter的id完全一致,别写错了!

3. 验证配置的小技巧

重启你的RCP应用后,打开Project Explorer右上角的小三角菜单,选择「Filters and Customization」,看看你的filter是不是已经在列表里并且被勾选了:

  • 如果没出现,检查扩展ID有没有拼写错误,或者是不是和其他插件的ID冲突了。
  • 如果勾选了但还是没生效,打开正则表达式测试工具,确认^\..*能匹配你的目标文件夹(比如.settings、.gradle这类)。

编程方式的备选方案(如果扩展配置还是搞不定)

要是觉得扩展配置太麻烦,或者需要动态控制过滤规则,也可以用代码直接给Project Explorer加过滤逻辑:

// 获取Project Explorer的视图实例
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IViewPart projectExplorer = page.findView("org.eclipse.ui.navigator.ProjectExplorer");

if (projectExplorer instanceof CommonNavigator) {
  CommonNavigator navigator = (CommonNavigator) projectExplorer;
  TreeViewer viewer = (TreeViewer) navigator.getCommonViewer();
  
  // 添加自定义过滤规则
  viewer.addFilter(new ViewerFilter() {
    @Override
    public boolean select(Viewer viewer, Object parentElement, Object element) {
      if (element instanceof IResource) {
        IResource resource = (IResource) element;
        String name = resource.getName();
        // 只隐藏以点开头的文件夹,其他资源都显示
        return !(resource.getType() == IResource.FOLDER && name.startsWith("."));
      }
      return true;
    }
  });
}

这个方式更灵活,比如你可以加个开关,让用户手动控制要不要隐藏这些文件夹。


内容的提问来源于stack exchange,提问作者Travelling Salesman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:36:10