首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java Swing 實戰:文件目錄瀏覽器與過濾器的完整實現

     編輯:Java 綜合教學

項目需求

構建一個圖形界面應用,功能包括:

  • 下拉框選擇文件擴展名過濾器(.jpg、.zip、.doc 等)。
  • 指定目錄,遞歸列出所有文件/子目錄名稱。
  • 結果在可滾動文本區域展示,支持異常捕獲提示。

核心代碼結構

public class FileUtils extends JFrame {
    // 1. 目錄遍歷核心邏輯
    public static String listDirectory(File dir) throws IllegalAccessException {
        if (!dir.exists()) throw new IllegalAccessException("目錄不存在: " + dir);
        if (!dir.isDirectory()) throw new IllegalAccessException("非目錄: " + dir);

        String[] names = dir.list(); // 僅獲取當前層級,非遞歸
        StringBuilder sb = new StringBuilder();
        for (String name : names) sb.append(name).append("\n");
        return sb.toString();
    }

    // 2. GUI 構建與事件綁定
    public static void main(String[] args) {
        JFrame frame = new JFrame("文件瀏覽器");
        JPanel panel = new JPanel(new BorderLayout());

        // 過濾器下拉框(當前版本未實際關聯過濾邏輯,僅作演示)
        String[] filters = {".jpg", ".zip", ".doc"};
        JComboBox comboBox = new JComboBox<>(filters);
        comboBox.setEditable(true);

        // 結果展示區
        JTextArea textArea = new JTextArea();
        textArea.setBackground(Color.BLACK);
        textArea.setForeground(Color.GREEN);
        textArea.setEditable(false);
        JScrollPane scrollPane = new JScrollPane(textArea);

        panel.add(comboBox, BorderLayout.NORTH);
        panel.add(scrollPane, BorderLayout.CENTER);
        frame.add(panel);

        // 異步加載數據,避免阻塞 EDT
        SwingUtilities.invokeLater(() -> {
            try {
                File targetDir = new File("C:\\Users\\Administrator\\Desktop\\Java作業5\\soundPlayer\\audio");
                String result = listDirectory(targetDir);
                textArea.setText(result);
            } catch (IllegalAccessException e) {
                textArea.setText("錯誤: " + e.getMessage());
                e.printStackTrace();
            }
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 400);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

關鍵技術點解析

1. Swing 線程模型

所有 GUI 操作必須在 Event Dispatch Thread (EDT) 執行。使用 SwingUtilities.invokeLater() 確保數據加載與界面渲染不阻塞主線程。

2. 異常處理體驗優化

自定義 IllegalAccessException 區分「路徑不存在」與「非目錄」兩種業務異常,在界面直接反饋給用戶,而非僅控制台打印堆棧。

3. 可擴展的過濾器設計

當前下拉框僅為佔位。進階實現可引入 FileFilter 接口,根據選中擴展名動態過濾 dir.listFiles(filter) 結果。

運行效果截圖

文件瀏覽器運行截圖

改進建議

  • 實現真正的遞歸遍歷(使用 Files.walkFileTree 或遞歸方法)。
  • 將過濾器下拉框與文件列表聯動。
  • 添加進度條顯示大目錄掃描進度。
  • 使用 JTree 替代 JTextArea 呈現樹狀目錄結構。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved