การใช้ไดเรกทอรี D:/A เป็นตัวอย่างโดยสมมติว่าโครงสร้างใน D:/A ไดเรกทอรีมีดังนี้:
d:/a | --a.sql | ---back.log |--b | | --e | |--1.txt | | --2.txt | | --3txt | `--f | | --4.txt | | --5ttxt | `--6.txt |--c | | --e | |-EACE1.TXT | |-SACE2.txt | |-SACE3.txt | `--f | | --4.txt | | --5ttxt | `--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 ให้วนซ้ำไปตามไดเรกทอรีย่อยนี้ ดังนั้นจึงมีความจำเป็นที่จะต้องพิจารณาว่าแต่ละองค์ประกอบผ่านเป็นไดเรกทอรีหรือไม่
นี่คือบางส่วนของรหัสจากรหัสปกติเป็นรหัสซ้ำ:
ไฟล์ dir = ไฟล์ใหม่ ("d:/a"); ไฟล์ [] file_list = dir.listfiles (); สำหรับ (รายการไฟล์: file_list) {ถ้า (list.isdirectory ()) {ไฟล์ dir_1 = list.listfiles (); // รหัสเริ่มต้นที่นี่และอาจเรียกซ้ำอย่างไม่มีเหตุผลถ้า (dir_1.isdirectory ()) {.... }} else {system.out.println (list.getabsolutepath ()); -ชิ้นส่วนรหัสซ้ำจะถูกห่อหุ้มดังนั้นวิธีการเรียกซ้ำจะใช้ในการห่อหุ้มรหัสและแก้ปัญหาการเรียกซ้ำที่ไม่มีที่สิ้นสุด รหัสสุดท้ายมีดังนี้:
นำเข้า java.io.*; คลาสสาธารณะ ListAllfiles {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ไฟล์ dir = ไฟล์ใหม่ ("d:/a"); System.out.println ("dir ------>"+dir.getabsolutepath ()); listall (dir); } โมฆะคงที่สาธารณะ listall (ไฟล์ dir) {file [] file_list = dir.listfiles (); สำหรับ (ไฟล์ไฟล์: file_list) {if (file.isdirectory ()) {system.out.println ("dir ------>"+file.getabsolutepath ()); listall (ไฟล์); } else {system.out.println ("ไฟล์ ------->"+file.getabsolutepath ()); -4.2 ตัวอย่างที่ 2: รายการไฟล์ (คิว) ในไดเรกทอรีทั้งหมด
แนวคิด:
1. วนซ้ำไดเรกทอรีที่กำหนด ใส่ชื่อไดเรกทอรีที่คุณข้ามเข้าไปในคอลเลกชัน
2. วนซ้ำองค์ประกอบไดเรกทอรีแต่ละรายการในคอลเลกชันและเพิ่มไดเรกทอรีย่อยทราเวอเรเตอร์ลงในคอลเลกชัน ในที่สุดลบออกจากคอลเลกชันหลังจากแต่ละการเดินทาง
3. ด้วยวิธีนี้ตราบใดที่พบไดเรกทอรีมันจะยังคงสำรวจต่อไปจนกว่าไดเรกทอรีบางตัวจะถูกสำรวจและไดเรกทอรีถัดไปในระดับเดียวกันจะเริ่มข้าม
สิ่งที่ควรพิจารณาคือการรวบรวมประเภทใดที่จะใช้ ก่อนอื่นองค์ประกอบไดเรกทอรีในคอลเลกชันไม่จำเป็นต้องจัดเรียงและชื่อไดเรกทอรีย่อยในไดเรกทอรีที่แตกต่างกันอาจถูกทำซ้ำ ดังนั้นการรวบรวมรายการจะใช้แทนชุดคอลเลกชัน เนื่องจากองค์ประกอบถูกเพิ่มและลบบ่อยครั้งจึงใช้ LinkedList แทนชุดสะสม ArrayList คุณสมบัติที่โดดเด่นที่สุดของคอลเลกชัน LinkedList คือคิว FIFO
เมื่อเปรียบเทียบกับการสำรวจแบบเรียกซ้ำได้ข้อได้เปรียบของการใช้คิวในการสำรวจไดเรกทอรีคือองค์ประกอบจะถูกวางไว้ในคอนเทนเนอร์และพวกเขาทั้งหมดอยู่ในหน่วยความจำกองทำให้ยากที่จะล้นหน่วยความจำ
นำเข้า java.util.*; นำเข้า java.io.*; คลาสสาธารณะ ListallFiles2 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ไฟล์ dir = ไฟล์ใหม่ ("d:/a"); คิว <file> file_queue = คิวใหม่ <file> (); // สร้างไฟล์คิว [] list = dir.listfiles (); สำหรับ (ไฟล์ไฟล์: รายการ) {// transulate ไดเรกทอรีระดับบนสุดถ้า (file.isdirectory ()) {system.out.println ("dir ----->"+file.getabsolutepath ()); file_queue.add (ไฟล์); } else {system.out.println ("ไฟล์ ------>"+file.getabsolutepath ()); }} ในขณะที่ (! file_queue.isnull ()) {// เริ่มต้นจากไดเรกทอรีย่อยรองไฟล์ traverse subdirs = file_queue.get (); // ก่อนอื่นรับไฟล์ชื่อไดเรกทอรีรอง [] subfiles = subdirs.listfiles (); สำหรับ (ไฟล์ subdir: subfiles) {// transtraight แต่ละไดเรกทอรีย่อยระดับถัดไปถ้า (subdir.isdirectory ()) {system.out.println ("dir ------>"+subdir.getabsolutepath ()); file_queue.add (subdir); // หากมีไดเรกทอรีย่อยในเลเยอร์ด้านในให้เพิ่มไปยังคิว} else {system.out.println ("ไฟล์ ------->"+subdir.getabsolutepath ()); }}}}}}}}} คิวคลาส <e> {Private LinkedList <E> LinkedList; queue () {linkedList = new LinkedList <E> (); } โมฆะสาธารณะเพิ่ม (e e) {linkedList.addfirst (e); // ขั้นสูง} สาธารณะ e get () {return linkedlist.removelast (); // แรกออก} บูลีนสาธารณะ isnull () {return linkedlist.isempty (); -4.3 ตัวอย่างที่ 3: โครงสร้างต้นไม้แสดงไฟล์ในไดเรกทอรีทั้งหมด (ซ้ำ)
แนวคิด:
1. รายการแรกไดเรกทอรีและไฟล์ระดับแรก
2. ถ้าเป็นไดเรกทอรีให้เพิ่มสัญลักษณ์คำนำหน้าที่สร้างรูปร่างของต้นไม้ จากนั้นวนซ้ำผ่านไดเรกทอรีนี้ซึ่งต้องใช้การสำรวจซ้ำ
นำเข้า Java.io.*; TreeFiles คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ไฟล์ dir = ไฟล์ใหม่ ("d:/a"); System.out.println (dir.getName ()); ListChilds (dir, 1); } โมฆะคงที่สาธารณะ listchilds (ไฟล์ f, ระดับ int) {สตริงคำนำหน้า = ""; สำหรับ (int i = 0; i <ระดับ; i ++) {prefix = "|"+คำนำหน้า; } ไฟล์ [] files = f.listfiles (); สำหรับ (ไฟล์ไฟล์: ไฟล์) {ถ้า (file.isdirectory ()) {system.out.println (คำนำหน้า + file.getName ()); ListChilds (ไฟล์, ระดับ+1); } else {system.out.println (คำนำหน้า + file.getName ()); -ผลลัพธ์มีดังนี้:
A | 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 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ไฟล์ไฟล์ = ไฟล์ใหม่ ("d:/a"); rm (ไฟล์); } โมฆะคงที่สาธารณะ RM (ไฟล์ f) {ถ้า (! f.exists ()) {system.out.println ("ไม่พบไฟล์!"); กลับ; } อื่นถ้า (f.isfile ()) {f.delete (); กลับ; } ไฟล์ [] dir = f.listfiles (); สำหรับ (ไฟล์ไฟล์: dir) {rm (ไฟล์); } f.delete (); -สรุป
ข้างต้นคือรายการไฟล์ไดเรกทอรี Java Display และ DELETE DIRETE ที่แนะนำโดย Editor ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!