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

Java 文件對話框過濾特定文件類型完整實現指南

     編輯:Java 程式設計入門

前言

在桌面應用開發中,文件選擇與過濾是常見需求。本文將詳細講解如何使用 Swing 的 JFileChooser 結合自定義 FileFilter 實現「選擇目錄 → 輸入擴展名 → 即時過濾顯示」的完整功能,並附帶完整可運行代碼與界面截圖。

核心設計思路

視圖層佈局

  • 選擇目錄按鈕(JButton):觸發目錄選擇對話框,限制只能選資料夾
  • 路徑顯示標籤(JLabel):顯示用戶選中的絕對路徑
  • 擴展名輸入框(JTextField):輸入如 gif、.txt 等,支援帶/不帶點號
  • 結果表格(JTable):三欄顯示「文件名、大小、修改日期」,不可編輯

事件與邏輯分離

「選擇目錄」與「輸入框文字變化」都需要觸發過濾刷新,因此將核心邏輯封裝為 listFiles() 私有方法:

  1. 若目錄為空直接返回
  2. 調用 dir.listFiles(new CustomFilter()) 獲取符合條件的文件數組
  3. 獲取表格的 DefaultTableModel,先 setRowCount(0) 清空
  4. 遍歷文件數組,提取 getName()、length()、lastModified() 組裝行數據並 addRow()

關鍵代碼解析

自定義過濾器 CustomFilter

private final class CustomFilter implements java.io.FileFilter {
    @Override
    public boolean accept(File pathname) {
        String extName = extNameField.getText();           // 取用戶輸入
        if (extName == null || extName.isEmpty()) return false;
        if (!extName.startsWith(".")) extName = "." + extName; // 自動補點
        extName = extName.toLowerCase();
        return pathname.getName().toLowerCase().endsWith(extName);
    }
}

亮點:內部類直接訪問外部類的 extNameField,無需額外傳參;統一轉小寫實現大小寫不敏感匹配。

目錄選擇事件

protected void do_button_actionPerformed(ActionEvent e) {
    JFileChooser chooser = new JFileChooser();
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); // 只選資料夾
    chooser.showDialog(this, null);
    dir = chooser.getSelectedFile();
    label.setText(dir == null ? "" : dir.toString());
    listFiles(); // 立即刷新
}

輸入框即時監聽

extNameField.addCaretListener(e -> listFiles()); // 任意文字變化即觸發

完整可運行代碼

代碼已整理為單文件 ListCustomTypeFile.java,包含所有 import、主類、內部類、GUI 構建與事件處理,複製即可在 JDK 8+ 環境直接運行。

運行效果展示

文件過濾演示界面

圖中展示:選擇某圖片資料夾,輸入 gif 後表格即時列出所有 GIF 文件及其大小、修改時間。

常見坑點與優化建議

  • 大小寫敏感:Windows 不區分,Linux 區分,代碼已統一 toLowerCase() 解決
  • 擴展名為空:過濾器直接返回 false,避免列出所有文件
  • 性能:目錄文件極多時建議改用 Files.newDirectoryStream + 背景線程
  • 擴展:可輕鬆增加「多擴展名用分號分隔」「遞歸子目錄」等功能

總結

本例展示了 Swing 開發中「視圖-模型分離、事件統一入口、內部類訪問外部狀態」的典型模式,代碼結構清晰,適合作為文件管理類工具的基礎模板。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved