Java ITreeContentProvider-如何在仍显示父文件夹的情况下筛选文件?

Java ITreeContentProvider-如何在仍显示父文件夹的情况下筛选文件?,java,eclipse,swt,filefilter,Java,Eclipse,Swt,Filefilter,我目前正在尝试为我的项目实现SWT CheckBoxTreeViewer。然而,我目前在文件过滤方面遇到了一些问题 我希望我的目录树显示目录中的所有文件,包括具有特定文件扩展名(如txt)的子目录及其父文件夹 例如: parentA childA1.txt childA2.txt parentB childB1.txt 然而,我想不出一个方法来做到这一点。我尝试了几种对文件过滤器进行编码的方法,如下所示: class FileTreeContentProvider imple

我目前正在尝试为我的项目实现SWT CheckBoxTreeViewer。然而,我目前在文件过滤方面遇到了一些问题

我希望我的目录树显示目录中的所有文件,包括具有特定文件扩展名(如txt)的子目录及其父文件夹

例如:

parentA
   childA1.txt
   childA2.txt
parentB
   childB1.txt
然而,我想不出一个方法来做到这一点。我尝试了几种对文件过滤器进行编码的方法,如下所示:

class FileTreeContentProvider implements ITreeContentProvider {

      public Object[] getChildren(Object arg0) {
        return ((File) arg0).listFiles();
      }

      public Object getParent(Object arg0) {
        return ((File) arg0).getParentFile();       
      }

      public boolean hasChildren(Object arg0) {
        Object[] obj = getChildren(arg0);
        return obj == null ? false : obj.length > 0;
      }
...
一,

二,

此代码段将删除以开头的文件夹。在根目录中,但不删除以开头的文件。在子目录中。因此,我得到了这样的东西:

parentA
   .project
   .settings
   childA1.txt
   childA2.txt
...
此外,由于它不会显式地过滤以txt结尾的文件,如果我将其他文件类型放在工作区文件夹中,我也会在树中看到这些文件,这不是我想要的


有没有办法解决这个问题?我正在使用Eclipse Mars 4.5.1。

您还没有向我们展示您在getChildren中的功能。getElements只适用于树的顶层。实际上,这刚刚解决了我的问题。我没有意识到getElements是树的顶层。我在getChildren中添加了一个文件过滤器,现在一切都已修复。谢谢
childA1.txt
childA2.txt
childB1.txt
...
   public Object[] getElements(Object arg0) {
      IWorkspace workspace = ResourcesPlugin.getWorkspace();
      File workspaceDirectory = workspace.getRoot().getLocation().toFile();
      return workspaceDirectory.listFiles(new FilenameFilter() {
         @Override
         public boolean accept(File workspaceDirectory, String name) {
            if (workspaceDirectory.getName().startsWith(".") {
               return false;
            }
            else {
               return true;
            }
         }
      });
   }
   ...
}
parentA
   .project
   .settings
   childA1.txt
   childA2.txt
...