使用swing展示文件夹下的目录结构


import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.*;
import java.io.File;

/**
 * 实现树形文件浏览器
 */
public class TreeFileBrowser {

    public static void main(String[] args) {
        try {
            // 设置系统界面风格
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
            System.out.println("设置系统界面风格时出错");
        }

        // 桌面路径作为根路径,替换为你的桌面路径
        File rootDir = new File("/Users/mi/Desktop");
        new TreeFileBrowser().start(rootDir);
    }

    public void start(File rootFile) {
        // 递归构建文件树的根节点
        DefaultMutableTreeNode rootNode = buildFileTree(rootFile);

        // 使用根节点去初始化一颗树
        JTree fileBrowserTree = new JTree(rootNode);
        fileBrowserTree.setVisible(true);

        JFrame fileBrowserFrame = new JFrame("简单树形文件浏览器");
        // 为 fileBrowserTree 添加滚动条,再将其添加到 fileBrowserFrame
        fileBrowserFrame.add(new JScrollPane(fileBrowserTree));
        fileBrowserFrame.setSize(new Dimension(300, 400));
        // 界面居中,需在设置好界面大小之后调用
        fileBrowserFrame.setLocationRelativeTo(null);
        fileBrowserFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fileBrowserFrame.setVisible(true);
    }

    /**
     * 递归构建文件树的根节点。不要用这个程序去获取某个盘(比如C、D)下文件树,因为一整个盘下的
     * 文件太多,运行时如果没有设置特殊的参数(JVM 栈 和 堆的大小)可能会导致溢出使程序崩溃
     *
     * @param rootFile 根文件
     * @return 文件树的根节点
     */
    public DefaultMutableTreeNode buildFileTree(File rootFile) {
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(rootFile.getName());

        // 如果是文件,即没有子文件
        if (rootFile.isFile()) { return rootNode; }

        File[] subFiles = rootFile.listFiles();

        // 列出文件出错,一般不会发生
        if (subFiles == null) { return rootNode; }

        for (File subFile : subFiles) {
            // 如果 subFile 是文件,则新建一个树节点
            if (subFile.isFile()) {
                DefaultMutableTreeNode subNode = new DefaultMutableTreeNode(subFile.getName());
                rootNode.add(subNode);
            }

            // 如果 subFile 是目录,那么构建一颗子树
            if (subFile.isDirectory()) {
                DefaultMutableTreeNode subNode = buildFileTree(subFile);
                rootNode.add(subNode);
            }
        }

        return rootNode;
    }
} 

界面完成后的测试
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离离原上草77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值