Принимая каталог D:/A в качестве примера, предполагая, что структура в каталоге D:/A заключается в следующем:
D:/a | --a.sql |-back.log |--b | |-e | | --1.txt | | --2.txt | | --3.txt | `--F | | --4.txt | | --5.txt | `--6.txt |--C | |-e | |-ace1.txt | |-ace2.txt | |-ACE3.txt | `--F | | --4.txt | | --5.txt | `--6.txt`-d | --A.Java |-abc (1) .txt |-abc (2) .txt |-abc (3) .txt |--b.java`--c.java
4.1 Пример 1: Списки файлов во всем каталоге (рекурсивные)
Идеи:
1. Перенос каталог D:/a.
2. Каждый раз, когда вы пересекаете каталог в d:/a, итерация над этой подкаталог. Следовательно, необходимо определить, является ли каждый проходной элемент, который проходит каталог.
Вот некоторые из кодов от обычного кода до рекурсивного кода:
File dir = new File ("d:/a"); file [] file_list = dir.listfiles (); для (список файлов: file_list) {if (list.isdirectory ()) {file dir_1 = list.listfiles (); // код начинается здесь и может быть рекурсивным логически бесконечно if (dir_1.isdirectory ()) {....}} else {System.out.println (list.getAbsolutePath ()); }}Повторные части кода инкапсулируются, поэтому рекурсивный метод используется для инкапсуляции кода и решения бесконечной рекурсивной задачи. Окончательный код заключается в следующем:
импортировать java.io.*; public class listallfiles {public static void main (string [] args) {file dir = new File ("d:/a"); System.out.println ("dir ------>"+dir.getabsolutepath ()); Listall (dir); } public static void listall (файл dir) {file [] file_list = dir.listfiles (); для (файл файла: file_list) {if (file.isdirectory ()) {System.out.println ("dir ------->"+file.getabsolutePath ()); listall (file); } else {system.out.println ("file ------->"+file.getabsolutepath ()); }}}}4.2 Пример 2: списки файлов (очередь) во всем каталоге
Идеи:
1. Итерация над данным каталогом. Поместите название каталога, которое вы пересекали в коллекцию.
2. Итерация над каждым элементом каталога в коллекции и добавьте в коллекцию обследованные подкаталогов. Наконец, удалите его из коллекции после каждого обхода.
3. Таким образом, до тех пор, пока будет обнаружен каталог, он будет продолжать пересекать до тех пор, пока не будет пройден определенный каталог, а следующий каталог на том же уровне начнет проходить.
Что учитывать, это какая коллекция использовать. Прежде всего, элементы каталога в коллекции не должны быть отсортированы, и имена подкаталога в разных каталогах могут быть повторены. Следовательно, коллекция списков используется вместо коллекции SET. Поскольку элементы часто добавляются и удаляются, используется LinkedList вместо коллекции ArrayList. Наиболее заметной особенностью коллекции LinkedList является очередь FIFO.
По сравнению с рекурсивным обходом преимущество использования очередей для пересечения каталога состоит в том, что элементы помещаются в контейнеры, и все они находятся в памяти кучи, что затрудняет переполнение памяти.
Импорт java.util.*; импортировать java.io.*; public class listallfiles2 {public static void main (string [] args) {file dir = new File ("d:/a"); Queue <file> file_queue = новая очередь <File> (); // построить файл очереди [] list = dir.listFiles (); для (файл файла: список) {// транслируют каталог верхнего уровня if (file.isdirectory ()) {System.out.println ("dir ----->"+file.getabsolutePath ()); file_queue.add (file); } else {system.out.println ("file ------>"+file.getabsolutePath ()); }} while (! file_queue.isnull ()) {// запустить с вторичного подкаталога, traverse file subdirs = file_queue.get (); // сначала получить вторичный файл имени подкаталери [] subfiles = subdirs.listfiles (); for (file subdir: subfiles) {// transtraight каждый подкататор следующего уровня if (subdir.isdirectory ()) {system.out.println ("dir ------>"+subdir.getabsolutepath ()); file_queue.add (subdir); // Если есть подкаталог во внутреннем уровне, добавьте в очередь} else {System.out.println ("file ------->"+subdir.getabsolutePath ()); }}}}}}}}} class queue <e> {private linkedlist <e> linkedlist; Queue () {linkedList = new LinkedList <e> (); } public void add (e e) {linkedList.addfirst (e); // Advanced} public e get () {return linkedList.removelast (); // сначала} public boolean isnull () {return linkedlist.isempty (); }}4.3 Пример 3: Структура дерева отображает файлы во всем каталоге (рекурсивный)
Идеи:
1. Сначала перечислите каталоги и файлы первого уровня.
2. Если это каталог, добавьте символ префикса, который образует форму дерева. Затем перечислите через этот каталог, который требует рекурсивного обхода.
Импорт java.io.*; public class treefiles {public static void main (string [] args) {file dir = new File ("d:/a"); System.out.println (dir.getName ()); ListChilds (Dir, 1); } public static void listChilds (файл f, int level) {string prefix = ""; for (int i = 0; i <level; i ++) {prefix = "|"+prefix; } File [] files = f.list -files (); для (файл файла: файлы) {if (file.isdirectory ()) {System.out.println (prefix + file.getName ()); ListChilds (файл, уровень+1); } else {System.out.println (prefix + file.getName ()); }}}}Результаты следующие:
а | A.SQL | b | | E | | 1.txt | | | 2.txt | | | 3.txt | | F | | 4.txt | | | 5.txt | | | 6.txt | Back.log | C | | E | | | ace1.txt | | | Ace2.txt | | | Ace3.txt | | F | | | 4.txt | | | 5.txt | | | 6.txt | D | | A.Java | | ABC (1) .txt | | ABC (2) .txt | | ABC (3) .txt | | B.Java | | C.Java
4.4 Удалить весь каталог
импортировать java.io.*; public class filedelete {public static void main (string [] args) {file file = new File ("d:/a"); rm (файл); } public static void rm (файл f) {if (! f.exists ()) {System.out.println ("файл не найден!"); возвращаться; } else if (f.isfile ()) {f.delete (); возвращаться; } File [] dir = f.list -files (); for (файл файла: dir) {rm (file); } f.delete (); }}Суммировать
Выше представлено список файлов файлов Display Display и Delete Directory, введенный редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!