Encontre arquivos em uma pasta usando Java

O que preciso fazer se pesquisar uma pasta diga C:\example

Depois, preciso passar por cada arquivo e verificar se ele corresponde a alguns caracteres iniciais, portanto, se os arquivos forem iniciados

 temp****.txt tempONE.txt tempTWO.txt 

Portanto, se o arquivo iniciar com temp e tiver uma extensão .txt, eu gostaria de colocar esse nome de arquivo em um File file = new File("C:/example/temp***.txt); para que eu possa ler em o arquivo, o loop, em seguida, precisa passar para o próximo arquivo para verificar se ele atende como acima.

O que você quer é File.listFiles(FileNameFilter filter) .

Isso lhe dará uma lista dos arquivos no diretório que você deseja que correspondam a um determinado filtro.

O código será semelhante a:

 // your directory File f = new File("C:\\example"); File[] matchingFiles = f.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.startsWith("temp") && name.endsWith("txt"); } }); 

Você pode usar um FilenameFilter , assim:

 File dir = new File(directory); File[] matches = dir.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.startsWith("temp") && name.endsWith(".txt"); } }); 

Eu sei, esta é uma questão antiga. Mas apenas por uma questão de completude, a versão lambda.

 File dir = new File(directory); File[] files = dir.listFiles((dir1, name) -> name.startsWith("temp") && name.endsWith(".txt")); 

Dê uma olhada em java.io.File.list() e FilenameFilter .

Considere o Apache Commons IO, ele tem uma class chamada FileUtils que tem um método listFiles que pode ser muito útil no seu caso.

Para listar arquivos Json do diretório fornecido.

 import java.io.File; import java.io.FilenameFilter; public class ListOutFilesInDir { public static void main(String[] args) throws Exception { File[] fileList = getFileList("directory path"); for(File file : fileList) { System.out.println(file.getName()); } } private static File[] getFileList(String dirPath) { File dir = new File(dirPath); File[] fileList = dir.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".json"); } }); return fileList; } } 

Como disse @Clarke, você pode usar java.io.FilenameFilter para filtrar o arquivo por condição específica.

Como um complemento, gostaria de mostrar como usar java.io.FilenameFilter para pesquisar o arquivo no diretório atual e em seu subdiretório.

Os methods comuns getTargetFiles e printFiles são usados ​​para pesquisar arquivos e imprimi-los.

 public class SearchFiles { //It's used in dfs private Map map = new HashMap(); private File root; public SearchFiles(File root){ this.root = root; } /** * List eligible files on current path * @param directory * The directory to be searched * @return * Eligible files */ private String[] getTargetFiles(File directory){ if(directory == null){ return null; } String[] files = directory.list(new FilenameFilter(){ @Override public boolean accept(File dir, String name) { // TODO Auto-generated method stub return name.startsWith("Temp") && name.endsWith(".txt"); } }); return files; } /** * Print all eligible files */ private void printFiles(String[] targets){ for(String target: targets){ System.out.println(target); } } } 

Vou demonstrar como usar recursivo , bfs e dfs para fazer o trabalho.

Recursivo :

  /** * How many files in the parent directory and its subdirectory 
* depends on how many files in each subdirectory and their subdirectory */ private void recursive(File path){ printFiles(getTargetFiles(path)); for(File file: path.listFiles()){ if(file.isDirectory()){ recursive(file); } } if(path.isDirectory()){ printFiles(getTargetFiles(path)); } } public static void main(String args[]){ SearchFiles searcher = new SearchFiles(new File("C:\\example")); searcher.recursive(searcher.root); }

Largura da primeira pesquisa :

 /** * Search the node's neighbors firstly before moving to the next level neighbors */ private void bfs(){ if(root == null){ return; } Queue queue = new LinkedList(); queue.add(root); while(!queue.isEmpty()){ File node = queue.remove(); printFiles(getTargetFiles(node)); File[] childs = node.listFiles(new FileFilter(){ @Override public boolean accept(File pathname) { // TODO Auto-generated method stub if(pathname.isDirectory()) return true; return false; } }); if(childs != null){ for(File child: childs){ queue.add(child); } } } } public static void main(String args[]){ SearchFiles searcher = new SearchFiles(new File("C:\\example")); searcher.bfs(); } 

Primeira pesquisa de profundidade :

/ ** * Procura o máximo possível ao longo de cada ramificação antes de retroceder * / private void dfs () {

  if(root == null){ return; } Stack stack = new Stack(); stack.push(root); map.put(root.getAbsolutePath(), true); while(!stack.isEmpty()){ File node = stack.peek(); File child = getUnvisitedChild(node); if(child != null){ stack.push(child); printFiles(getTargetFiles(child)); map.put(child.getAbsolutePath(), true); }else{ stack.pop(); } } } /** * Get unvisited node of the node * */ private File getUnvisitedChild(File node){ File[] childs = node.listFiles(new FileFilter(){ @Override public boolean accept(File pathname) { // TODO Auto-generated method stub if(pathname.isDirectory()) return true; return false; } }); if(childs == null){ return null; } for(File child: childs){ if(map.containsKey(child.getAbsolutePath()) == false){ map.put(child.getAbsolutePath(), false); } if(map.get(child.getAbsolutePath()) == false){ return child; } } return null; } public static void main(String args[]){ SearchFiles searcher = new SearchFiles(new File("C:\\example")); searcher.dfs(); } 

Appache commons IO vários

FilenameUtils.wildcardMatch

Veja Apache javadoc aqui . Ele corresponde ao curinga com o nome do arquivo. Então você pode usar este método para suas comparações.

Para elaborar essa resposta , o Apache IO Utils pode economizar algum tempo. Considere o seguinte exemplo que pesquisará recursivamente por um arquivo de um determinado nome:

  File file = FileUtils.listFiles(new File("the/desired/root/path"), new NameFileFilter("filename.ext"), FileFilterUtils.trueFileFilter() ).iterator().next(); 

Vejo: