Java - отображение содержимого каталога на основе поиска с использованием рекурсии - PullRequest
0 голосов
/ 25 марта 2012

Моя задача - написать класс RFind, который рекурсивно ищет текущий каталог и его подкаталоги, пытаясь сопоставить файлы с его единственным аргументом регулярного выражения.

Пока единственное, что я пробовал, это следующее, котороеа) не является рекурсивным и б) на самом деле не работает.Как бы вы поступили так?

Примечание: в приведенном примере показано, как вы можете передать регулярное выражение в командной строке и как оно будет выглядеть:

$ java RFind ".* .java "

. / RFind.java

. / src / AHTNF.java

$

public class RFind {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.print("Please enter a regular expression: ");
        String regex = in.next();

        Pattern p = Pattern.compile(regex);

        File dir = new File (".");

        File[] files = dir.listFiles();
        ArrayList<String> f = new ArrayList<String>();

        for (int i = 0; i < files.length; i++) {
            Matcher m = p.matcher(files[i].toString());
            if (m.matches()) {
                f.add(files[i].toString());
            }
        }

        for (int i = 0; i < f.size(); i++) {
            System.out.println(f.get(i));
        }

    }

}

1 Ответ

2 голосов
/ 25 марта 2012

Чтобы быть рекурсивным, вам нужен хотя бы один метод для вызова

public class Rec {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.print("Please enter a regular expression: ");
        String regex = in.next();

        Pattern p = Pattern.compile(regex);

        new Rec (p).start (".");
    }

    private Pattern p;

    Rec (Pattern pP)
    {
       p = pP;
    }

    void start (String pDir) {
        File dir = new File (pDir);

        File[] files = dir.listFiles();
        if (files == null) return;
        for (int i = 0; i < files.length; i++) {
            String x = files[i].toString();
            if (".".equals(x)) continue;
            if ("..".equals(x)) continue;

            Matcher m = p.matcher(x);
            if (m.matches()) {
                System.out.println(x);
            }
            if (files[i].isDirectory ()) {
               start (pDir+File.separator + x);
            }
        }
    }

Может работать, еще не скомпилировано

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