Как обойти все директории на диске без рекурсии в java?

Пользователь

от hermina.hauck , в категории: Java , год назад

Как обойти все директории на диске без рекурсии в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от keyon.brown , год назад

@hermina.hauck 

В Java можно обойти все директории на диске без рекурсии, используя стек для хранения директорий, которые еще не были обработаны. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.io.File;
import java.util.Stack;

public class DirectoryTraversal {

    public static void main(String[] args) {
        File root = new File("/path/to/root/directory");
        Stack<File> stack = new Stack<>();
        stack.push(root);
        
        while (!stack.empty()) {
            File directory = stack.pop();
            File[] files = directory.listFiles();
            
            if (files != null) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        stack.push(file);
                    }
                    // Делайте что-то с файлом, например, выводите его имя
                    System.out.println(file.getName());
                }
            }
        }
    }
}


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


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