Метод рекурсии для отображения структуры каталогов пути (Java) - PullRequest
0 голосов
/ 01 апреля 2020

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

Он хочет, чтобы вывод выглядел так:

           testdir
           +--f1
           +--d2
              +--d22
                 +f221
               +f212
               +f211
            +--f2
            +--d1
               +--f12

Я использовал этот метод :

package Task;

import java.io.File;
import java.io.IOException;

public class Recursive {

public static void main(String[] args) {
        File currentDirectory = new File(" . "); // current directory
        displayDirectoryContents(currentDirectory);
    }

    public static void displayDirectoryContents(File dirct) {           
        File[] myfiles = dirct.listFiles();                 
                for (File file : myfiles) {                     
                    if (file.isDirectory()) {                           
                    //it worked when i used file.getCanonicalPath()); but file.getName()); does not work
                        System.out.println("directory : " + file.getName());                            
                        displayDirectoryContents(file);                         
                    } 
                else {
                    //it worked when i used file.getCanonicalPath()); but file.getName()); does not work
                        System.out.println(" files : " + file.getName());
                    }
                }
    }

}

getName не работает и выдает мне ошибку (

Исключение в потоке "main" java .lang.NullPointerException в lab16.displayDirectoryContents (lab16. java : 17) в lab16.main (lab16. java: 10))

1 Ответ

0 голосов
/ 01 апреля 2020

Я переписал алгоритм, и он без проблем работает с .getName (). Я не делал никаких отступов.

import java.io.File;

public class Recursive {
    private static void TraverseDirectory(File[] files) {
        if (files.length == 0) return;

        for (File file : files) {
            if (file.isFile()) System.out.println(file.getName());
            else {
                // is DIR
                System.out.println(file.getName());
                TraverseDirectory(file.listFiles());
            }
        }

    }

    public static void main(String[] args) {
        File cur_dir = new File("/");
        TraverseDirectory(cur_dir.listFiles());
    }
}

РЕДАКТИРОВАТЬ: после того, как вы отредактировали свой вопрос, теперь я могу видеть, в чем была проблема. Вы ничего не возвращали, когда содержимое каталога было пустым (оно было нулевым). Следовательно, он не может пройти нулевое значение.

...