java - 使用 Java 中的 Jtree 和 File 列出文件和目录

标签 java jtree file-management

我想用 JTree 创建一个非常非常简单的文件管理器,但我只看到了非常困难的代码,我想创建一个非常干净和简单的脚本。

你能帮我吗?如何在 JTree 中列出我的计算机的目录?

最佳答案

我编写了我能想到的最简单的文件浏览器示例。它列出了 Windows 计算机上 C: 驱动器上的所有目录和文件。

这是结果。

File Browser Swing JFrame

这是代码。我将所有内容放在一个类中,以便更容易粘贴到此处。你应该分开类(class)。

package com.ggl.testing;

import java.io.File;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class FileBrowser implements Runnable {

    private DefaultMutableTreeNode root;

    private DefaultTreeModel treeModel;

    private JTree tree;

    @Override
    public void run() {
        JFrame frame = new JFrame("File Browser");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        File fileRoot = new File("C:/");
        root = new DefaultMutableTreeNode(new FileNode(fileRoot));
        treeModel = new DefaultTreeModel(root);

        tree = new JTree(treeModel);
        tree.setShowsRootHandles(true);
        JScrollPane scrollPane = new JScrollPane(tree);

        frame.add(scrollPane);
        frame.setLocationByPlatform(true);
        frame.setSize(640, 480);
        frame.setVisible(true);

        CreateChildNodes ccn = 
                new CreateChildNodes(fileRoot, root);
        new Thread(ccn).start();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new FileBrowser());
    }

    public class CreateChildNodes implements Runnable {

        private DefaultMutableTreeNode root;

        private File fileRoot;

        public CreateChildNodes(File fileRoot, 
                DefaultMutableTreeNode root) {
            this.fileRoot = fileRoot;
            this.root = root;
        }

        @Override
        public void run() {
            createChildren(fileRoot, root);
        }

        private void createChildren(File fileRoot, 
                DefaultMutableTreeNode node) {
            File[] files = fileRoot.listFiles();
            if (files == null) return;

            for (File file : files) {
                DefaultMutableTreeNode childNode = 
                        new DefaultMutableTreeNode(new FileNode(file));
                node.add(childNode);
                if (file.isDirectory()) {
                    createChildren(file, childNode);
                }
            }
        }

    }

    public class FileNode {

        private File file;

        public FileNode(File file) {
            this.file = file;
        }

        @Override
        public String toString() {
            String name = file.getName();
            if (name.equals("")) {
                return file.getAbsolutePath();
            } else {
                return name;
            }
        }
    }

}

关于java - 使用 Java 中的 Jtree 和 File 列出文件和目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23804675/

相关文章:

node.js - 我应该如何在 NodeJS 中存储文件

c++ - mmap() 的 Linux 非持久性后备存储

java - Derby 数据库 - 确定层次结构中的级别以转换 DB -> DefaultMutableTreeNode Java 对象

java - JTree setSelectionPaths 展开时间太长

java - 将字符串输入存储在文件中

java - 如何在android中将long转换为datetime

编辑树单元格时,Java JTree 自定义图标更改回默认图标

asp.net-mvc - 在MVC中上传动态创建具有权限的文件夹

java - 单例如何影响单元测试

java - 找不到类 [org.apache.derby.jdbc.ClientDriver]