2016-03-10 2 views
0

Я просмотрел Recursively list files in Java, но это, похоже, не решает мою проблему. Я попытался реализовать его так, как показали ответы в этом вопросе, но моя программа по-прежнему не работает так, как я этого хочу. Он по-прежнему не «опускается» на уровень, если он находит каталог и отправляет этот новый путь каталога в качестве аргумента, чтобы проверить, существует ли файл.Поиск определенного файла с учетом каталога и имени файла, спуск по каталогу и отправка его пути

Я пытаюсь заставить свой класс FileFinder работать. Учитывая имя файла и каталог для начала поиска, я хочу найти и найти файл с именем файла.

Я создал своего рода тестовую директорию в /Users/Name/Documents/testing/. В одном из 3-х каталогов под /Documents/testing/ есть файл под названием test.py. Но моя программа не найдет файл. Если я, тем не менее, даю методу соответствующий каталог, например /Documents/testing/correctDir/, он находит и печатает файл и его путь.

Так что я думаю, что моя проблема в том, что когда я нахожу каталог, вызов fileFinder не работает так, как должен. Я имею дело с «AbsolutePath» неправильно в этой строке?

Вот код:

import java.io.*; 
public class FileFinder { 
    String fileFinder(String fileName, String root){ 
     String pathToFile = ""; 
     File rootDir = new File(root); 
     File[] files = rootDir.listFiles(); 
     for(File f:files){ 
      if(f.isDirectory()){ 
       //System.out.println(f.getAbsolutePath()); 
       fileFinder(fileName,f.getAbsolutePath()); 
      } 
      else if(f.getName().equals(fileName)){ 
       pathToFile = f.getAbsolutePath(); 
      } 
     } 
     return pathToFile; 
    } 
} 
+2

Возможный дубликат из [Рекурсивно перечислить файлы в Java] (http://stackoverflow.com/questions/2056221/recursively-list-files-in-java) – Prashant

ответ

1

Вы сделали две ошибки: во-первых, вы не установили pathToFile в случае рекурсивного вызова fileFinder. Во-вторых, вы не разорвать петлю for, когда вы действительно нашли файл в директории, которую вы в настоящее время ищет в этом ваш код с исправлениями, я проверил его и он работает правильно:.

String fileFinder(String fileName, String root){ 
    String pathToFile = ""; 
    File rootDir = new File(root); 
    File[] files = rootDir.listFiles(); 
    for(File f:files){ 
     if(f.isDirectory()){ 
      //System.out.println(f.getAbsolutePath()); 
      pathToFile = fileFinder(fileName,f.getAbsolutePath()); 
     } 
     else if(f.getName().equals(fileName)){ 
      pathToFile = f.getAbsolutePath(); 
     } 
     if (!pathToFile.isEmpty()) 
      break; 
    } 
    return pathToFile; 
} 
+0

Спасибо. Это исправлено! Действительно оцените помощь @vagelis. – Gurkmeja101

+0

Добро пожаловать! :) – vagelis

Смежные вопросы