Java JTree文件过滤器和文件夹过滤器

Java JTree文件过滤器和文件夹过滤器,java,swing,jtree,Java,Swing,Jtree,我想要一个JTree,它显示我当前目录中所有扩展名仅为“.h”的文件,并且它应该显示所有文件夹,除了一个名为“系统卷信息”的文件夹,在我当前目录中,这是我的代码,还有什么。。更新我需要做什么 import java.awt.BorderLayout; import java.awt.Container; import java.io.File; import java.util.Collections; import java.util.Vector; import javax.swing.B

我想要一个JTree,它显示我当前目录中所有扩展名仅为“.h”的文件,并且它应该显示所有文件夹,除了一个名为“系统卷信息”的文件夹,在我当前目录中,这是我的代码,还有什么。。更新我需要做什么

import java.awt.BorderLayout;
import java.awt.Container;
import java.io.File;
import java.util.Collections;
import java.util.Vector;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;


public class DriveTree extends JPanel
{

    public DriveTree(File dir) 
    {
        setLayout(new BorderLayout());
        JTree tree = new JTree(addNodes(null, dir));
        add(tree);
    }

    DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop, File dir)
    {
        String curPath = dir.getPath();
        DefaultMutableTreeNode curDir = new DefaultMutableTreeNode(curPath);
        if (curTop != null)
        {
          curTop.add(curDir);
        }
        Vector ol = new Vector();
        String[] tmp = dir.list();
        for (int i = 0; i < tmp.length; i++)
        ol.addElement(tmp[i]);
        Collections.sort(ol, String.CASE_INSENSITIVE_ORDER);
        File f;
        Vector files = new Vector();
        for (int i = 0; i < ol.size(); i++)
        {
            String thisObject = (String) ol.elementAt(i);
            String newPath;
            if (curPath.equals("."))
            newPath = thisObject;
            else
            newPath = curPath + File.separator + thisObject;
            if ((f = new File(newPath)).isDirectory())
            addNodes(curDir, f);
            else
            files.addElement(thisObject);
        }
       for (int fnum = 0; fnum < files.size(); fnum++)
       curDir.add(new DefaultMutableTreeNode(files.elementAt(fnum)));
       return curDir;
    }

  public static void main(String[] av)
  {

    JFrame frame = new JFrame("Drive View");
    Container cp = frame.getContentPane();
    if (av.length == 0) 
    {
      cp.add(new DriveTree(new File(".")));
    }
    else
    {
      cp.setLayout(new BoxLayout(cp, BoxLayout.X_AXIS));
      for (int i = 0; i < av.length; i++)
      cp.add(new DriveTree(new File(av[i])));
    }
    frame.pack();
    frame.setVisible(true);
    frame.setSize(300,500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}
导入java.awt.BorderLayout;
导入java.awt.Container;
导入java.io.File;
导入java.util.Collections;
导入java.util.Vector;
导入javax.swing.BoxLayout;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTree;
导入javax.swing.tree.DefaultMutableTreeNode;
公共类DriveTree扩展了JPanel
{
公共驱动树(文件目录)
{
setLayout(新的BorderLayout());
JTree树=新的JTree(addNodes(null,dir));
添加(树);
}
DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop,文件目录)
{
字符串curPath=dir.getPath();
DefaultMutableTreeNode curDir=新的DefaultMutableTreeNode(curPath);
if(curTop!=null)
{
curTop.add(curDir);
}
向量ol=新向量();
字符串[]tmp=dir.list();
for(int i=0;i
您可以获取要添加的文件的扩展名,并在此扩展名上进行检查:

String extension = "";

int i = fileName.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
    extension = fileName.substring(i+1);
}

if(extension.equals("h"))
{
   //Add to your tree
}
字符串扩展名=”;
int i=fileName.lastIndexOf('.');
如果(i>0&&i
您可以获取要添加的文件的扩展名,并在此扩展名上进行检查:

String extension = "";

int i = fileName.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
    extension = fileName.substring(i+1);
}

if(extension.equals("h"))
{
   //Add to your tree
}
字符串扩展名=”;
int i=fileName.lastIndexOf('.');
如果(i>0&&i
您可以使用FileNameExtensionFilter

FileNameExtensionFilter filter = new FileNameExtensionFilter(null, "h");

for(//...
    if ((f = new File(newPath)).isDirectory())
        addNodes(curDir, f);
    else if(filter.accept(new File(newPath))) //accept only returns true if the extension matches
        files.addElement(thisObject);

您可以使用FileNameExtensionFilter

FileNameExtensionFilter filter = new FileNameExtensionFilter(null, "h");

for(//...
    if ((f = new File(newPath)).isDirectory())
        addNodes(curDir, f);
    else if(filter.accept(new File(newPath))) //accept only returns true if the extension matches
        files.addElement(thisObject);

利用API。
文件
类提供了从
列表
方法过滤返回结果的功能

File[] file = dir.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        String name = pathname.getName().toLowerCase();
        return name.endsWith(".h") || (pathname.isDirectory() && !("System Volume Information".equalsIgnoreCase(name)));
    }
});
用示例更新

据我所知,这就是你要找的。这可能会改变屏幕上的结果,因为我直接使用
文件
对象,但可以使用

导入java.awt.BorderLayout;
导入java.awt.Container;
导入java.io.File;
导入java.io.FileFilter;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Collections;
导入java.util.List;
导入java.util.Vector;
导入javax.swing.BoxLayout;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTree;
导入javax.swing.tree.DefaultMutableTreeNode;
公共类DriveTree扩展了JPanel{
公共驱动树(文件目录){
setLayout(新的BorderLayout());
JTree树=新的JTree(addNodes(null,dir));
添加(树);
}
DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curTop,文件目录){
字符串curPath=dir.getPath();
DefaultMutableTreeNode curDir=新的DefaultMutableTreeNode(curPath);
if(curTop!=null){
curTop.add(curDir);
}
List files=new ArrayList(Arrays.asList(dir.listFiles)(new FileFilter()){
@凌驾
公共布尔接受(文件路径名){
String name=pathname.getName().toLowerCase();
返回name.endsWith(“.h”)| |(pathname.isDirectory()&&&!(“系统卷信息”.equalsIgnoreCase(名称));
}
})));
收集.分类(文件);
//文件f;
//向量文件=新向量();
//对于(int i=0;i