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