Existe-t-il un code Java intégré) qui analysera un dossier donné et le recherchera .txt
des dossiers?
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"); }
} );
}
}
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.
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
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);
}
});
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;
}
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!");
}
}
}