2012-11-16 58 views
1

我現在有一個應用程序可以從目錄中選擇文件。我想要做的是能夠有一個功能,您可以在其中放入文件擴展名,如.gif,.txt等。單擊按鈕後,應用程序將運行該目錄並找到並選擇該類型的所有文件。我必須顯示的唯一代碼是我目前的應用程序,沒有這個。希望得到正確的方向或建議。過濾和選擇目錄中的文件

+0

@Bhesh Gurung 我沒有註冊。我沒有嘗試過任何東西。甚至不知道如何處理它。我知道如何通過擴展來過濾文件,但不知道如何將它們全部放在一個地方,類似於搜索特定文件類型的硬盤驅動器 – rogerthat

回答

3
private List<File> getMatchingFiles(File parent, final String extension) { 
    File[] files = parent.listFiles(new FileFilter() { 

     public boolean accept(File dir) { 
      String name = dir.getName(); 
      if(name.endsWith(extension)) { 
       return true; 
      } 
     } 
    }); 

    List<File> retval = Arrays.asList(files); 
    return retval; 
} 
+0

好一個+1的答案 –

+0

現在我可以將它放入actionevent爲不同文件類型添加不同的擴展名?我將要做的是搜索按鈕,例如,當您輸入.jpg時,這將返回該類型的所有文件?順便說一句,謝謝。 – rogerthat

1
FilenameFilter filter = new FilenameFilter() { 
    public boolean accept(File dir, String name) { 
    return (!name.endsWith(".gif") 
    } 
}; 
2

什麼你正在尋找可能是java.io.File#list(filter)

編輯:如果你想整個文件系統進行搜索,那麼你需要遞歸掃描每個direcotry:

public static void filter (String dirname, List<File> result) { 
    try { 
     for (String f : new File(dirname).list()) { 
      String filename = dirname + f; 
      File theFile = new File(filename); 
      if (theFile.isDirectory()) { 
       filter(filename + "/", result); 
      } else if (new FileFilter() { 
       public boolean accept(File pathname) { 
        return pathname.getName().endsWith(".gif"); 
       } 
      }.accept(theFile)) { 
       result.add(theFile); 
      } 
     } 
    } catch (Exception e) { 
     // may raise null-pointer when access denied 
    } 
} 

public static void main(String[] args) { 
    List<File> result = new ArrayList<File>(); 
    filter("F:/", result); 

    System.out.println(result.size()); 
} 
3

用在JFileChooser,迄今提供的所有答案都是次優的。請改爲JFileChooser.setFileFilter(javax.swing.filechooser.FileFilter)以獲得最佳用戶體驗。

它最終可能會看起來像這樣:使用A Sample FileChooser Program代碼禮貌獲得

JFileChooser with file filters

  1. 圖像。
+1

對於來自恐龍年齡的最可怕的印刷屏幕+1 :-) phaaaa brrrrr – mKorbel

+1

@healix不,從來沒有,爲什麼要重新發明輪子,這裏是你的答案和適當的方式,爲什麼遍歷文件[]? – mKorbel

+0

@mKorbel這是一個禮貌的'我的隊友谷歌'。我正在搜索'JFileChooser + FileFilter'並查看擴展名列表的任何圖像,然後我拒絕了一個40Kb(可怕)和另一個(非常好的)71Kb的圖像, <6.5 Kb(並顯示鼠標指針)。 ;) –