2012-11-16 5 views
1

J'ai actuellement une application qui sélectionne les fichiers d'un répertoire. ce que je veux faire est d'avoir une fonctionnalité où vous pouvez mettre dans une extension de fichier tels que .gif, .txt etc .. et après un clic sur un bouton l'application va parcourir le répertoire et trouver et sélectionner tous les fichiers de ce type . Le seul code que je dois montrer est celui de mon application actuelle qui n'a rien de tout cela. Espérait un point dans la bonne direction ou un conseil.Filtrage et sélection de fichiers à partir d'un répertoire

+0

@Bhesh Gurung Je n'ai pas upvote. Je n'ai rien essayé. Je ne sais même pas comment l'aborder. Je sais comment filtrer les fichiers par extension mais pas comment les avoir tous en un seul endroit semblable à une recherche de votre disque dur pour un type de fichier particulier – rogerthat

Répondre

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

Bon Un +1 pour la réponse –

+0

maintenant je peux jeter ceci dans un actionevent et juste ajouter des extensions différentes pour différents types de fichiers? Ce que je vais avoir est un bouton de recherche et quand vous tapez .jpg, par exemple, cela retournera tous les fichiers de ce type? Au fait, merci. – rogerthat

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

Ce que vous cherchez est probablement le java.io.File#list(filter).

edit: Si vous voulez que le système de fichiers rechercher, alors vous devez analyser récursive tous les 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

Pour une utilisation dans un JFileChooser, toutes les réponses jusqu'à présent proposées sont sous-optimaux. Au lieu de mettre en œuvre JFileChooser.setFileFilter(javax.swing.filechooser.FileFilter) pour la meilleure expérience utilisateur.

Il pourrait finir par quelque chose comme ça :

JFileChooser with file filters

  1. image obtenue en utilisant l'aimable autorisation de A Sample FileChooser Program de code.
+1

+1 pour le plus mauvais écran des dinosaures :-) phaaaa brrrrr – mKorbel

+1

@healix pas, jamais, pourquoi réinventer la roue, voici votre réponse et les bonnes manières aussi, pourquoi traverser dans le fichier [] ??? – mKorbel

+0

@mKorbel Celui-ci était une gracieuseté de «mon pote Google». Je naviguais pour 'JFileChooser + FileFilter' et je regardais n'importe quelle image qui avait la liste étendue, puis j'en rejetais une qui était 40Kb (et horrible) et une autre (vraiment gentille) qui était 71Kb et je me contentais de l'image qui était <6.5 Kb (et montré le pointeur de la souris). ;) –

Questions connexes