Hacer un filtro de ficheros con varias extensiones

2851 vistas

Veamos un ejemplo de implementación de FileFilter (package javax.swing.filechooser) que controla varias extensiones.



java
  1. public class FiltreExtensible extends FileFilter{
  2.   // descripción y extensiones aceptadas por el filtro
  3.   private String description;
  4.   private List<String> extensions;
  5.  
  6.   // constructor a partir de la descripción
  7.   public FiltreExtensible(String description){
  8.       if(description == null){
  9.         throw new NullPointerException("La description ne peut être null.");
  10.       }
  11.       this.description = description;
  12.       this.extensions = new ArrayList<String>();
  13.   }
  14.  
  15.   // implementación del FileFilter
  16.   public boolean accept(File file){
  17.       if(file.isDirectory() || extensions.size()==0) {
  18.         return true;
  19.       }
  20.       String nombreFichero = file.getName().toLowerCase();
  21.       for(String extension : extensions){
  22.         if(nombreFichero.endsWith(extension)){
  23.             return true;
  24.         }
  25.       }
  26.       return false;
  27.   }
  28.  
  29.   public String getDescription(){
  30.       StringBuffer buffer = new StringBuffer(description);
  31.       buffer.append(" (");
  32.       for(String extension : extensions){
  33.         buffer.append(extension).append(" ");
  34.       }
  35.       return buffer.append(")").toString();
  36.   }
  37.  
  38.   // métodos de ayuda
  39.   public void setDescription(String description){
  40.       if(description == null){
  41.         throw new NullPointerException("La descripción no puede ser null.");
  42.       }
  43.       this.description = description;
  44.   }
  45.  
  46.   public void addExtension(String extension){
  47.       if(extension == null){
  48.         throw new NullPointerException("La extensión no puede ser null.");
  49.       }
  50.       extensions.add(extension);
  51.   }
  52.  
  53.   public void removeExtension(String extension){
  54.       extensions.remove(extension);
  55.   }
  56.  
  57.   public void clearExtensions(){
  58.       extensions.clear();
  59.   }
  60.  
  61.   public List<String> getExtensions(){
  62.       return extensions;
  63.   }
  64. }



Y podemos usarlo asÃ:



java
  1. FiltreExtensible filtre = new FiltreExtensible("Ficheros Java");
  2. filtre.addExtension(".java");
  3. JFileChooser chooser = new JFileChooser(".");
  4. chooser.addChoosableFileFilter(filtre);
  5. chooser.showOpenDialog(null);
  6. filtre.addExtension(".class");
  7. chooser.showOpenDialog(null);
  8. filtre.setDescription("Ficheros class");
  9. filtre.removeExtension(".java");
  10. chooser.showOpenDialog(null);
  11. filtre.setDescription("Todos los ficheros");
  12. filtre.clearExtensions();
  13. chooser.showOpenDialog(null);