生成指定文件目录下的文件树

用FileSystemView fileSystemView = FileSystemView.getFileSystemView()初始化的树默认以desktop为根目录,但是如果不使用FileSystemView来初始化,自定义的FileNode将不能用实际文件来定义,即不能与文件联系起来,可以采用listFile(),和FileSystemView相结合的方法,同时在FiletTreeModel中 自定义FileNode的isLeaf()函数来实现

class FileTreeModel extends DefaultTreeModel {
    public FileTreeModel(TreeNode root) {
        super(root);
         FileSystemView fileSystemView = FileSystemView.getFileSystemView();
            File[] files=fileSystemView.getRoots();
        for (int i = 0; i < files.length; i++) {
            FileNode childFileNode = new FileNode(fileSystemView.getSystemDisplayName(files[i]), fileSystemView.getSystemIcon(files[i]), files[i], false);
            DefaultMutableTreeNode childTreeNode = new DefaultMutableTreeNode(childFileNode);
            ((DefaultMutableTreeNode)root).add(childTreeNode);
        }
    }
    @Override
    public boolean isLeaf(Object node) {
        DefaultMutableTreeNode treeNode=(DefaultMutableTreeNode)node;
        FileNode fileNode=(FileNode)treeNode.getUserObject();
        if(fileNode.isDummyRoot)return false;
        return fileNode.file.isFile();
    }
}


初始化


  DefaultMutableTreeNode lastTreeNode =(DefaultMutableTreeNode) event.getPath().getLastPathComponent();
                FileNode fileNode = (FileNode) lastTreeNode.getUserObject();
                
                File[] files;
                File f = new File("C:/Users/Dadaism/Desktop/123/");
                
                if (!fileNode.isInit) {     
                    if (fileNode.isDummyRoot) {
                       files = f.listFiles(); 
                    } 
                    else {
                    FileSystemView fs = FileSystemView.getFileSystemView();
                       files = fs.getFiles(
                       ((FileNode) lastTreeNode.getUserObject()).file,
                       false);
                    }
                    for (int i = 0; i < files.length; i++) {
                        FileNode childFileNode;
                        DefaultMutableTreeNode childTreeNode;
                        
                        if(files[i].getName().endsWith(".txt")){
                            String filename = files[i].getName().replace(".txt", "");
                            childFileNode = new FileNode(filename,null,files[i], false);
                        }
                        else{
                            childFileNode = new FileNode(files[i].getName(),null,files[i],false);
                        }
                        childTreeNode = new DefaultMutableTreeNode(childFileNode);
                        lastTreeNode.add(childTreeNode);
                    }
                    DefaultTreeModel treeModel1 = (DefaultTreeModel) getModel();
                    treeModel1.nodeStructureChanged(lastTreeNode);
                }
              fileNode.isInit = true;
                    

你可能感兴趣的:(生成指定文件目录下的文件树)