web-dev-qa-db-fra.com

Comment faire FileFilter en Java?

comme dans le titre comment faire filtrer les fichiers .txt?

j'ai écrit quelque chose comme ça mais il y a une erreur :(

 private void jMenuItem1ActionPerformed(Java.awt.event.ActionEvent evt) {                                           
        JFileChooser chooser = new JFileChooser();
        int retval = chooser.showOpenDialog(null);

        String yourpath = "E:\\Programy Java\\Projekt_SR1\\src\\project_sr1";
        File directory = new File(yourpath);
        String[] myFiles;
        FilenameFilter filter = new FilenameFilter() {
        public boolean accept(File directory, String fileName) {
            return fileName.endsWith(".txt");
        }
        };
        myFiles = directory.list(filter);


        if(retval == JFileChooser.APPROVE_OPTION)
        {
            File myFile = chooser.getSelectedFile();
        }
35
harry180

Ici vous trouverez quelques exemples de travail. Ceci est également un bon exemple de FileFilter utilisé dans JFileChooser.

En gros, vous devez remplacer FileFilter class et écrire votre code personnalisé dans sa méthode accpet. La méthode accept de l'exemple ci-dessus consiste à effectuer une filtration en fonction des types de fichiers:

public boolean accept(File file) {
    if (file.isDirectory()) {
      return true;
    } else {
      String path = file.getAbsolutePath().toLowerCase();
      for (int i = 0, n = extensions.length; i < n; i++) {
        String extension = extensions[i];
        if ((path.endsWith(extension) && (path.charAt(path.length() 
                  - extension.length() - 1)) == '.')) {
          return true;
        }
      }
    }
    return false;
}

Ou plus simple à utiliser est FileNameFilter qui a accepté la méthode avec le nom de fichier comme argument, vous n’avez donc pas besoin de l’obtenir manuellement.

24
Harry Joy

Essayez quelque chose comme ça ...

String yourPath = "insert here your path..";
File directory = new File(yourPath);
String[] myFiles = directory.list(new FilenameFilter() {
    public boolean accept(File directory, String fileName) {
        return fileName.endsWith(".txt");
    }
});
47
Franky

À partir de JDK8 sur les mots, il est aussi simple que 

final String extension = ".Java";
final File currentDir = new File(YOUR_DIRECTORY_PATH);
File[] files = currentDir.listFiles((File pathname) -> pathname.getName().endsWith(extension));
7
Raghu K Nair

Depuis Java7, vous pouvez simplement utiliser FileNameExtensionFilter(String description, String... extensions)

Un exemple simple de JFileChooser à l'exemple serait:

JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Text files", "txt"));

Je sais que la question a été posée il y a longtemps, mais c'est en fait la solution la plus simple.

5
Seega

Voici une petite classe utilitaire que j'ai créée:

import Java.io.File;
import Java.io.FilenameFilter;
import Java.util.HashSet;
import Java.util.Iterator;
import Java.util.Set;

/**
 * Convenience utility to create a FilenameFilter, based on a list of extensions
 */
public class FileExtensionFilter implements FilenameFilter {
    private Set<String> exts = new HashSet<String>();

    /**
     * @param extensions
     *            a list of allowed extensions, without the dot, e.g.
     *            <code>"xml","html","rss"</code>
     */
    public FileExtensionFilter(String... extensions) {
        for (String ext : extensions) {
            exts.add("." + ext.toLowerCase().trim());
        }
    }

    public boolean accept(File dir, String name) {
        final Iterator<String> extList = exts.iterator();
        while (extList.hasNext()) {
            if (name.toLowerCase().endsWith(extList.next())) {
                return true;
            }
        }
        return false;
    }
}

Usage: 

       String[] files = new File("myfile").list(new FileExtensionFilter("pdf", "Zip"));
3
Renaud
File f = null;
File[] paths;

try {

    f = new File(dir);

    // filefilter
    FilenameFilter fileNameFilter = new FilenameFilter() {

        public boolean accept(File dir, String name) {

            if (name.lastIndexOf('.') > 0) {

                int lastIndex = name.lastIndexOf('.');
                String str = name.substring(lastIndex);

                if (str.equals("." + selectlogtype)) {
                    return true;
                }
            }
            return false;
        }
    };

    paths = f.listFiles(fileNameFilter);

    for (int i = 0; i < paths.length; i++) {
        try {

            FileWriter fileWriter = new FileWriter("C:/Users/maya02/workspace/ftp_log/filefilterlogtxt");
            PrintWriter bWriter = new PrintWriter(fileWriter);

            for (File writerpath1 : paths) {
                bWriter.println(writerpath1);
            }

            bWriter.close();
        } 
        catch (IOException e) { System.out.println("HATA!!"); }
    }
    System.out.println("path dosyaya aktarıldı!.");
} 
catch (Exception e) { }
0
user6594307

Vous vous trompez ici:

int retval = chooser.showOpenDialog(null); 
public boolean accept(File directory, String fileName) {`
return fileName.endsWith(".txt");`
}

Vous affichez d'abord la boîte de dialogue de sélection de fichier puis appliquez le filtre! Cela ne fonctionnera pas. Appliquez d'abord le filtre puis affichez la boîte de dialogue:

public boolean accept(File directory, String fileName) {
        return fileName.endsWith(".txt");
}
int retval = chooser.showOpenDialog(null);
0
zooes

Un autre exemple simple:

public static void listFilesInDirectory(String pathString) {
  // A local class (a class defined inside a block, here a method).
  class MyFilter implements FileFilter {
    @Override
    public boolean accept(File file) {
      return !file.isHidden() && file.getName().endsWith(".txt");
    }
  }

  File directory = new File(pathString);
  File[] files = directory.listFiles(new MyFilter());

  for (File fileLoop : files) {
    System.out.println(fileLoop.getName());
  }
}

// Call it
listFilesInDirectory("C:\\Users\\John\\Documents\\zTemp");

// Output
Cool.txt
RedditKinsey.txt
...
0
John Bentley