Encuentra archivos en una carpeta usando Java

Lo que debo hacer si busca en una carpeta, dice C:\example

Luego, tengo que revisar cada archivo y verificar si coincide con algunos caracteres iniciales, así que si los archivos comienzan

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

Entonces, si el archivo comienza con temp y tiene una extensión .txt, me gustaría poner ese nombre de archivo en un File file = new File("C:/example/temp***.txt); entonces puedo leer en el archivo, el ciclo necesita moverse al siguiente archivo para verificar si cumple con lo anterior.

Lo que quiere es File.listFiles(FileNameFilter filter) .

Eso le dará una lista de los archivos en el directorio que desea que coincidan con un determinado filtro.

El código se verá similar 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"); } }); 

Puede usar un FilenameFilter , así:

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

Lo sé, esta es una vieja pregunta. Pero solo por el bien de la compleción, la versión lambda.

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

Eche un vistazo a java.io.File.list() y FilenameFilter .

Considere Apache Commons IO, tiene una clase llamada FileUtils que tiene un método de listFiles que puede ser muy útil en su caso.

Para enumerar los archivos Json de su directorio determinado.

 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 dijo @Clarke, puede usar java.io.FilenameFilter para filtrar el archivo por condición específica.

Como complemento, me gustaría mostrar cómo usar java.io.FilenameFilter para buscar archivos en el directorio actual y su subdirectorio.

Los métodos comunes getTargetFiles y printFiles se utilizan para buscar archivos e imprimirlos.

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

Demostraré cómo usar recursivo , bfs y dfs para hacer el trabajo.

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

Breadth First Search :

 /** * 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(); } 

Profundidad Primera búsqueda :

/ ** * Busque lo más posible a lo largo de cada twig 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 varios

FilenameUtils.wildcardMatch

Vea Apache javadoc aquí . Coincide con el comodín con el nombre de archivo. Entonces puedes usar este método para tus comparaciones.

Para profundizar en esta respuesta , Apache IO Utils podría ahorrarle algo de tiempo. Considere el siguiente ejemplo que buscará recursivamente un archivo de un nombre de stack:

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

Ver: