web-dev-qa-db-fra.com

Java: Rechercher les fichiers .txt dans le dossier spécifié

Existe-t-il un code Java intégré) qui analysera un dossier donné et le recherchera .txt des dossiers?

51
Sri

Vous pouvez utiliser la méthode listFiles() fournie par le Java.io.File classe.

import Java.io.File;
import Java.io.FilenameFilter;

public class Filter {

    public File[] Finder( String dirName){
        File dir = new File(dirName);

        return dir.listFiles(new FilenameFilter() { 
                 public boolean accept(File dir, String filename)
                      { return filename.endsWith(".txt"); }
        } );

    }

}
122
djna

Essayer:

List<String> textFiles(String directory) {
  List<String> textFiles = new ArrayList<String>();
  File dir = new File(directory);
  for (File file : dir.listFiles()) {
    if (file.getName().endsWith((".txt"))) {
      textFiles.add(file.getName());
    }
  }
  return textFiles;
}

Vous souhaitez effectuer une recherche insensible à la casse, auquel cas:

    if (file.getName().toLowerCase().endsWith((".txt"))) {

Si vous souhaitez rechercher de manière récursive dans une arborescence de répertoires des fichiers texte, vous devriez pouvoir adapter ce qui précède en tant que fonction récursive ou itérative à l'aide d'une pile.

22
cletus
import org.Apache.commons.io.filefilter.WildcardFileFilter;

.........
.........

File dir = new File(fileDir);
FileFilter fileFilter = new WildcardFileFilter("*.txt");
File[] files = dir.listFiles(fileFilter);

Le code ci-dessus fonctionne très bien pour moi

19
John Jintire

C'est vraiment utile, je l'ai utilisé avec un léger changement:

filename=directory.list(new FilenameFilter() { 
    public boolean accept(File dir, String filename) { 
        return filename.startsWith(ipro); 
    }
});
6
ald33

J'ai conçu ma solution en fonction des publications que j'ai trouvées ici avec Google. Et je pensais qu'il n'y avait pas de mal à poster le mien aussi, même s'il s'agit d'un vieux fil.

Le seul avantage de ce code est qu'il peut également parcourir des sous-répertoires.

import Java.io.File;
import Java.io.FileFilter;
import Java.util.ArrayList;
import Java.util.Arrays;
import Java.util.List;
import org.Apache.commons.io.filefilter.DirectoryFileFilter;
import org.Apache.commons.io.filefilter.WildcardFileFilter;

La méthode est la suivante:

List <File> exploreThis(String dirPath){

    File topDir = new File(dirPath);

    List<File> directories = new ArrayList<>();
    directories.add(topDir);

    List<File> textFiles = new ArrayList<>();

    List<String> filterWildcards = new ArrayList<>();
    filterWildcards.add("*.txt");
    filterWildcards.add("*.doc");

    FileFilter typeFilter = new WildcardFileFilter(filterWildcards);

    while (directories.isEmpty() == false)
    {
        List<File> subDirectories = new ArrayList();

        for(File f : directories)
        {
            subDirectories.addAll(Arrays.asList(f.listFiles((FileFilter)DirectoryFileFilter.INSTANCE)));
            textFiles.addAll(Arrays.asList(f.listFiles(typeFilter)));
        }

        directories.clear();
        directories.addAll(subDirectories);
    }

    return textFiles;
}
4
Lokarno
import Java.io.IOException;
import Java.nio.file.FileSystems;
import Java.nio.file.FileVisitResult;
import Java.nio.file.Path;
import Java.nio.file.PathMatcher;
import Java.nio.file.SimpleFileVisitor;
import Java.nio.file.attribute.BasicFileAttributes;
import Java.util.ArrayList;

public class FileFinder extends SimpleFileVisitor<Path> {
    private PathMatcher matcher;
    public ArrayList<Path> foundPaths = new ArrayList<>();

    public FileFinder(String pattern) {
        matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
    }

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        Path name = file.getFileName();

        if (matcher.matches(name)) {
            foundPaths.add(file);
        }

        return FileVisitResult.CONTINUE;
    }
}

import Java.io.IOException;
import Java.nio.file.Files;
import Java.nio.file.LinkOption;
import Java.nio.file.Path;
import Java.nio.file.Paths;
import Java.util.ArrayList;

public class Main {
    public static void main(String[] args) throws IOException {
        Path fileDir = Paths.get("files");
        FileFinder Finder = new FileFinder("*.txt");
        Files.walkFileTree(fileDir, Finder);

        ArrayList<Path> foundFiles = Finder.foundPaths;

        if (foundFiles.size() > 0) {
            for (Path path : foundFiles) {
                System.out.println(path.toRealPath(LinkOption.NOFOLLOW_LINKS));
            }
        } else {
            System.out.println("No files were founds!");
        }
    }
}
1
Dragan Menoski