Обход каталога для определенной папки - PullRequest
0 голосов
/ 05 мая 2011

enter code here Я написал следующий код, который рекурсивно ищет каталог папки, чтобы найти конкретную папку. Предполагается, что программа проверит имя папки и, если имя папки «src», то она должна войти в эту папку, чтобы получить все файлы. В настоящее время программа получает все файлы из всех каталогов.

public class Main {

public static void main(String[] args) {
    File fileObject = new File("C:\\Users\\lizzie\\Documents\\");
    recursiveTraversal(fileObject);
}

public static void recursiveTraversal(File fileObject)
{
    if (fileObject.isDirectory())
    {   
        File allFiles[] = fileObject.listFiles();
        for(File aFile : allFiles){
            recursiveTraversal(aFile);
        }
    }
    else if (fileObject.isFile())
    {
        System.out.println(fileObject.getAbsolutePath());
    }
}

}

когда я проверял, является ли определенная папка каталогом, я добавил следующее ограничение, но это не помогло.

if (fileObject.isDirectory() && fileObject.getName().equals("src"))`

Пожалуйста, дайте мне знать, что я могу сделать, чтобы улучшить мой код. Все будет оценено. Спасибо

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

Если вы посмотрите на свое if-else внутри recursiveTraversal, вы увидите, что вы печатаете все, что не является каталогом, независимо от того, где оно находится. Вот исправление:

public class Main {

    public static void main(String[] args) {
        File fileObject = new File("C:\\Users\\lizzie\\Documents\\");
        recursiveSearch(fileObject);
    }

    public static void recursiveSearch(File fileObject) {
        if (fileObject.isDirectory()) {
            if (fileObject.getName().equals("src")) {
                recursivePrint(fileObject);
            } else {
                File allFiles[] = fileObject.listFiles();
                for(File aFile : allFiles){
                    recursiveSearch(aFile);
                }
            }
        }
        // ignore non-directory objects during search
    }

    public static void recursivePrint(File fileObject)
    {
        if (fileObject.isDirectory())
        {   
            File allFiles[] = fileObject.listFiles();
            for(File aFile : allFiles){
                recursivePrint(aFile);
            }
        }
        else if (fileObject.isFile())
        {
            System.out.println(fileObject.getAbsolutePath());
        }
    }
}

Это будет печатать все файлы рекурсивно из любого каталога с именем src.

1 голос
/ 05 мая 2011

Что вам нужно сделать, так это наложить ограничения на то, что печатается, а не на то, что вы просматриваете. Как вы заметили, обход работает нормально, так как он получает все файлы во всех подпапках.

Если вы хотите напечатать только имена файлов внутри каталога "src" (не в подкаталогах), тогда вы можете сделать ...

...
else if (fileObject.isFile() && fileObject.getParent().getName().equals("src") 
{
  System.out.println(fileObject.getAbsolutePath());
}
...

Если вы хотите распечатать содержимое каталога "src" и всех его подкаталогов, то вам нужно разбить свой алгоритм на две части

  1. найдите папку "src", затем
  2. используйте ваш текущий алгоритм для печати всего во всех каталогах оттуда и ниже
0 голосов
/ 05 мая 2011

Вместо проверки .equals () в имени, проверьте, содержит ли имя "src", используя либо fileObject.getName (). Содержит (StringBuffer), либо fileObject.getName (). IndexOf ("src")! = -1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...