أخذ الدليل D:/A كمثال ، على افتراض أن الهيكل في الدليل D:/A كما يلي:
D:/a |-a.sql |-back.log |--b | |-ه | | -1.txt | | --2.txt | | --3.txt | `-f | | --4.txt | | --5.txt | `-6.txt |--c | |-ه | |-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. نقل الدليل د:/أ.
2. في كل مرة تقوم فيها بالمرور إلى دليل في D:/A ، قم بالتكرار على هذا الدليل الفرعي. لذلك ، من الضروري تحديد ما إذا كان كل عنصر تم اجتيازه هو دليل.
فيما يلي بعض الرموز من التعليمات البرمجية العادية إلى التعليمات البرمجية العودية:
file dir = new file ("d:/a") ؛ file [] file_list = dir.listfiles () ؛ for (file list: file_list) {if (list.isdirectory ()) {file dir_1 = list.listfiles () ؛ // يبدأ الرمز هنا وقد يكون متكررًا بشكل منطقي إذا كان (dir_1.isdirectory ()) {....}} آخر {system.out.println (list.getabsolutepath ()) ؛ }}يتم تغليف أجزاء الكود المتكرر ، لذلك يتم استخدام الطريقة العودية لتغليف الكود وحل المشكلة العودية اللانهائية. الرمز النهائي هو كما يلي:
استيراد java.io.*؛ الفئة العامة 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 (file dir) {file [] file_list = dir.listfiles () ؛ لـ (ملف الملف: file_list) {if (file.isdirectory ()) {system.out.println ("dir ------>"+file.getabsolutepath ()) ؛ ListAll (ملف) ؛ } آخر {system.out.println ("file ------->"+file.getabsolutepath ()) ؛ }}}}4.2 مثال 2: قائمة الملفات (قائمة الانتظار) في الدليل بأكمله
الأفكار:
1. تكرار على الدليل المحدد. ضع اسم الدليل الذي اجتازته في المجموعة.
2. التكرار عبر كل عنصر دليل في المجموعة ، وأضف الدلائل الفرعية التي تم اجتيازها إلى المجموعة. أخيرًا ، احذفها من المجموعة بعد كل اجتياز.
3. وبهذه الطريقة ، طالما تم العثور على الدليل ، سيستمر في اجتيازه حتى يتم اجتياز دليل معين وسيبدأ الدليل التالي في نفس المستوى في اجتياز.
ما يجب مراعاته هو نوع المجموعة التي يجب استخدامها. بادئ ذي بدء ، لا تحتاج إلى فرز عناصر الدليل في المجموعة ، وقد تتكرر أسماء الدليل الفرعي في أدلة مختلفة. لذلك ، يتم استخدام مجموعة القائمة بدلاً من مجموعة المجموعة. نظرًا لأنه يتم إضافة العناصر وحذفها بشكل متكرر ، يتم استخدام LinkedList بدلاً من مجموعة ArrayList. الميزة الأبرز في مجموعة LinkedList هي قائمة انتظار FIFO.
مقارنة بالمرور العودية ، فإن ميزة استخدام قوائم الانتظار لاجتياز الدليل هي وضع العناصر في الحاويات ، وكلها في ذاكرة الكومة ، مما يجعل من الصعب تجاوز الذاكرة.
استيراد java.util.*؛ استيراد java.io.*؛ الفئة العامة listallfiles2 {public static void main (string [] args) {file dir = new file ("d:/a") ؛ قائمة الانتظار <IPER> FILE_QUEUE = قائمة انتظار جديدة <IPILE> () ؛ // بناء ملف قائمة انتظار [] قائمة = dir.listfiles () ؛ لـ (ملف الملف: قائمة) {// نقل الدليل من المستوى الأعلى إذا (file.isdirectory ()) {system.out.println ("dir ----->"+file.getabsolutepath ()) ؛ file_queue.add (ملف) ؛ } آخر {system.out.println ("file ------>"+file.getabsolutepath ()) ؛ }} بينما (! file_queue.isnull ()) {// ابدأ من الدليل الفرعي الثانوي ، traverse file subdirs = file_queue.get () ؛ // أولاً احصل على ملف اسم الدليل الفرعي الثانوي [] subfiles = subdirs.listfiles () ؛ لـ (file subdir: subfiles) {// transtraight كل دليل فرعي من المستوى التالي إذا (subdir.isdirectory ()) {system.out.println ("dir ------>"+subdir.getabsolutepath ()) ؛ file_queue.add (subdir) ؛ // إذا كان هناك دليل فرعي في الطبقة الداخلية ، فأضف إلى قائمة الانتظار} آخر {system.out.println ("file ------->"+subdir.getabsolutepath ()) ؛ }}}}}}}}} قائمة انتظار الفئة <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 () ؛ // first out} public boolean isNull () {return LinkedList.isempty () ؛ }}4.3 مثال 3: بنية الشجرة يعرض الملفات في الدليل بأكمله (متكرر)
الأفكار:
1. قم أولاً بإدراج الدلائل والملفات من المستوى الأول.
2. إذا كان دليلًا ، أضف رمزًا بادئة يشكل شكل شجرة. ثم تكرار من خلال هذا الدليل ، والذي يتطلب اجتياز العودية.
استيراد java.io.*؛ الطبقة العامة treefiles {public static void main (string [] args) {file dir = new file ("d:/a") ؛ system.out.println (dir.getName ()) ؛ listchilds (dir ، 1) ؛ ) لـ (int i = 0 ؛ i <level ؛ i ++) {prefix = "|"+prefix ؛ } file [] files = f.listfiles () ؛ لـ (ملف الملف: الملفات) {if (file.isdirectory ()) {system.out.println (prefix + file.getName ()) ؛ ListChilds (ملف ، مستوى+1) ؛ } آخر {system.out.println (prefix + file.getName ()) ؛ }}}}النتائج كما يلي:
أ | A.SQL | ب | | ه | | 1.txt | | | 2.txt | | | 3.TXT | | و | | 4.txt | | | 5.txt | | | 6.txt | back.log | ج | | ه | | | ACE1.TXT | | | ACE2.TXT | | | ACE3.TXT | | و | | | 4.txt | | | 5.txt | | | 6.txt | د | | A.Java | | ABC (1) .txt | | ABC (2) .txt | | ABC (3) .txt | | ب. جافا | | سيجافا
4.4 حذف الدليل بأكمله
استيراد java.io.*؛ فئة عامة fileDelete {public static void main (string [] args) {file file = new file ("d:/a") ؛ RM (ملف) ؛ } public static void rm (file f) {if (! f.exists ()) {system.out.println ("ملف غير موجود!") ؛ يعود؛ } آخر if (f.isfile ()) {f.delete () ؛ يعود؛ } file [] dir = f.listfiles () ؛ لـ (ملف الملف: dir) {rm (file) ؛ } f.delete () ؛ }}لخص
ما ورد أعلاه هو قائمة ملفات دليل عرض Java وحذف الدليل الذي أدخله المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!