Поиск файлов в папке с помощью Java

Что мне нужно сделать, если поиск в папке говорит C:\example

Затем мне нужно пройти через каждый файл и проверить, совпадает ли он с несколькими начальными символами, поэтому, если файлы начинаются

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

Поэтому, если файл начинается с temp и имеет расширение .txt, я хотел бы затем поместить это имя File file = new File("C:/example/temp***.txt); поэтому я могу читать файл, цикл затем должен перейти к следующему файлу, чтобы проверить, соответствует ли он, как указано выше.

Вы хотите, чтобы File.listFiles(FileNameFilter filter) .

Это даст вам список файлов в каталоге, который вы хотите, который соответствует определенному фильтру.

Код будет выглядеть так:

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

Вы можете использовать FilenameFilter , например:

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

Я знаю, это старый вопрос. Но только ради полноты, lambda-версия.

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

Посмотрите на java.io.File.list() и FilenameFilter .

Рассмотрим Apache Commons IO, у него есть class FileUtils, который имеет метод listFiles который может быть очень полезен в вашем случае.

За списком Json-файлов из вашего каталога.

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

Как сказал @Clarke, вы можете использовать java.io.FilenameFilter для фильтрации файла по определенному условию.

В качестве дополнения я хотел бы показать, как использовать java.io.FilenameFilter для поиска файла в текущем каталоге и в его подкаталоге.

Общие методы getTargetFiles и printFiles используются для поиска файлов и их печати.

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

Я продемонстрирую, как использовать рекурсивные , bfs и dfs, чтобы выполнить работу.

Рекурсивный :

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

Ширина первого поиска :

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

Глубина первого поиска :

/ ** * Искать как можно дальше вдоль каждой ветви перед обратным трассировкой * / 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(); } в  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(); } 

Вложения

FilenameUtils.wildcardMatch

См. Apache javadoc здесь . Он соответствует шаблону с именем файла. Таким образом, вы можете использовать этот метод для своих сравнений.

Чтобы уточнить этот ответ , Apache IO Utils может сэкономить вам некоторое время. Рассмотрим следующий пример, который будет рекурсивно искать файл с заданным именем:

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

Видеть:

  • Каким будет самый быстрый способ конкатенации трех файлов на C #?
  • простой HttpURLConnection POST-файл multipart / form-data от android до google blobstore
  • Должен ли я хранить мои изображения в базе данных или папках?
  • Написание текстового файла на SD-карту не удается
  • Как реализовать загрузку файла в asp.net
  • Каков наилучший способ открыть и прочитать файл в Perl?
  • как я могу показать размер файлов в / proc? он не должен быть размером 0
  • Как заставить Logstash повторно просмотреть файл?
  • Загрузка файла Symfony2
  • Как я могу использовать синтаксис Bash в целевых файлах Makefile?
  • Прочитать текстовый файл в Google GWT?
  • Давайте будем гением компьютера.