У меня есть вопрос относительно итерации через дерево файловой системы. С учетом очереди и узла, на котором вы начинаете, как бы вы могли его перебирать? Я получаю это изначально, вы должны ставить в очередь узел, с которого вы начинаете, но я смущен тем, как реализовать методы hasNext() и next(). Вот два метода, которые я должен реализовать, я не хочу, чтобы кто-нибудь дал мне код, и если вы это сделаете, я просто буду использовать его в качестве рекомендаций, а не для копирования из-за плагиата. Кроме того, рекурсия не является вариантом, потому что использование этого будет обходной путь по глубине, а не желаемый обход ширины файловой системы
public boolean hasNext()
public File next()
Используйте реализацию Queue
. Допустим, вы начинаете с головы узла. Сначала положите голову в очередь. Итерации над всеми детьми головы и поставить их в очередь. После того, как все дети сделаны, удалите голову, чтобы получить следующий узел из очереди. Теперь этот новый узел станет головным узлом. Найдите его и поставьте в очередь и так далее... Очередь объявлений следует за FIFO (First in First out), с которой вы сможете реализовать BFS (Breath first Search).
и итерации по всем детям в голове, должен ли я использовать метод listFiles() или isDirectory()?
Отвечая на ваш комментарий. скажем, у вас есть начальный путь P1 - голова. Сначала проверьте, является ли это каталогом с использованием метода isDirectory()
. Если ваш обход закончился. Если это listFiles()
в этом каталоге. перебирать файлы, которые listFiles()
возвращает, обрабатывать и добавлять в очередь, только если isDirectory()
возвращается для него. Затем вытащите файл из очереди и продолжите обработку.