Java: Localizar arquivos .txt na pasta especificada

Existe um código Java embutido que analise uma determinada pasta e procure por arquivos .txt ?

Você pode usar o método listFiles() fornecido pela class java.io.File .

 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"); } } ); } } 

Experimentar:

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

Você deseja fazer uma pesquisa sem distinção entre maiúsculas e minúsculas e, nesse caso:

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

Se você quiser pesquisar recursivamente por meio de uma tree de diretórios para arquivos de texto, poderá adaptar os itens acima como uma function recursiva ou uma function iterativa usando uma pilha.

 import org.apache.commons.io.filefilter.WildcardFileFilter; ......... ......... File dir = new File(fileDir); FileFilter fileFilter = new WildcardFileFilter("*.txt"); File[] files = dir.listFiles(fileFilter); 

O código acima funciona muito bem para mim

É muito útil, eu usei com uma pequena alteração:

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

Fiz minha solução com base nas postagens que encontrei aqui com o Google. E eu pensei que não há mal nenhum em postar o meu também, mesmo que seja um tópico antigo.

A única vantagem deste código é que ele também pode percorrer subdiretórios.

 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; 

O método é o seguinte:

 List  exploreThis(String dirPath){ File topDir = new File(dirPath); List directories = new ArrayList<>(); directories.add(topDir); List textFiles = new ArrayList<>(); List filterWildcards = new ArrayList<>(); filterWildcards.add("*.txt"); filterWildcards.add("*.doc"); FileFilter typeFilter = new WildcardFileFilter(filterWildcards); while (directories.isEmpty() == false) { List 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 { private PathMatcher matcher; public ArrayList 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 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!"); } } } 

Aqui está o meu código específico da plataforma (unix)

 public static List findFiles(String dir, String... names) { LinkedList command = new LinkedList(); command.add("/usr/bin/find"); command.add(dir); List result = new LinkedList(); if (names.length > 1) { List newNames = new LinkedList(Arrays.asList(names)); String first = newNames.remove(0); command.add("-name"); command.add(first); for (String newName : newNames) { command.add("-or"); command.add("-name"); command.add(newName); } } else if (names.length > 0) { command.add("-name"); command.add(names[0]); } try { ProcessBuilder pb = new ProcessBuilder(command); Process p = pb.start(); p.waitFor(); InputStream is = p.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { // System.err.println(line); result.add(new File(line)); } p.destroy(); } catch (Exception e) { e.printStackTrace(); } return result; } 

import org.apache.commons.io.FileUtils;

Listar htmFileList = novo ArrayList ();

para (Arquivo: (List) FileUtils.listFiles (novo arquivo (srcDir), new String [] {“txt”, “TXT”}, true)) {htmFileList.add (arquivo); }

Este é o meu código mais recente para adicionar todos os arquivos de texto de um diretório