Mengambil direktori D:/A sebagai contoh, dengan asumsi bahwa struktur dalam D:/A direktori adalah sebagai berikut:
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 Contoh 1: Daftar file di seluruh direktori (rekursif)
Ide:
1.Transfer direktori D:/a.
2. Setiap kali Anda melintasi direktori di D:/A, beralih di atas subdirektori ini. Oleh karena itu, perlu untuk menentukan apakah setiap elemen yang dilintasi adalah direktori.
Berikut adalah beberapa kode dari kode normal ke kode rekursif:
File dir = file baru ("d:/a"); file [] file_list = dir.listfiles (); untuk (daftar file: file_list) {if (list.isdirectory ()) {file dir_1 = list.listFiles (); // Kode dimulai di sini dan mungkin bersifat rekursif secara logis jika (dir_1.isdirectory ()) {....}} else {System.out.println (list.getAbsolutePath ()); }}Bagian kode yang diulang dienkapsulasi, sehingga metode rekursif digunakan untuk merangkum kode dan menyelesaikan masalah rekursif yang tak terbatas. Kode terakhir adalah sebagai berikut:
impor java.io.*; kelas publik listAllFiles {public static void main (string [] args) {file dir = file baru ("d:/a"); System.out.println ("dir ------>"+dir.getAbsolutePath ()); listall (dir); } public static void listAll (file dir) {file [] file_list = dir.listfiles (); untuk (file file: file_list) {if (file.isDirectory ()) {System.out.println ("dir ------>"+file.getAbsolutePath ()); listall (file); } else {System.out.println ("File ------->"+file.getAbsolutePath ()); }}}}4.2 Contoh 2: Daftar file (antrian) di seluruh direktori
Ide:
1. Iterasi di atas direktori yang diberikan. Masukkan nama direktori yang Anda luput ke dalam koleksi.
2. Iterasi pada setiap elemen direktori dalam koleksi, dan tambahkan subdirektori yang dilintasi ke koleksi. Akhirnya, hapus dari koleksi setelah setiap traversal.
3. Dengan cara ini, selama direktori ditemukan, ia akan terus melintasi sampai direktori tertentu dilalui dan direktori berikutnya pada level yang sama akan mulai melintasi.
Yang harus dipertimbangkan adalah koleksi seperti apa yang akan digunakan. Pertama -tama, elemen direktori dalam koleksi tidak perlu diurutkan, dan nama subdirektori dalam direktori yang berbeda dapat diulang. Oleh karena itu, koleksi daftar digunakan sebagai pengganti koleksi set. Karena elemen sering ditambahkan dan dihapus, LinkedList alih -alih koleksi ArrayList digunakan. Fitur paling menonjol dari koleksi LinkedList adalah antrian FIFO.
Dibandingkan dengan traversal rekursif, keuntungan menggunakan antrian untuk melintasi direktori adalah bahwa elemen ditempatkan dalam wadah, dan mereka semua dalam memori tumpukan, sehingga sulit untuk meluap memori.
impor java.util.*; import java.io.*; kelas publik listAllFiles2 {public static void main (string [] args) {file dir = file baru ("d:/a"); Antrian <file> file_queue = antrian baru <pangkutan> (); // Bangun file antrian [] daftar = dir.listfiles (); untuk (file file: list) {// transulasi direktori tingkat atas if (file.isDirectory ()) {System.out.println ("dir ----->"+file.getAbsolutePath ()); file_queue.add (file); } else {System.out.println ("File ------->"+file.getAbsolutePath ()); }} while (! file_queue.isnull ()) {// Mulai dari subdirektori sekunder, traverse file subdirs = file_queue.get (); // Pertama dapatkan file nama subdirektori sekunder [] subfiles = subdirs.listfiles (); untuk (file subdir: subfiles) {// transtraight setiap subdirektori tingkat berikutnya if (subdir.isdirectory ()) {system.out.println ("dir ------"+subdir.getabsolutePath ()); file_queue.add (subdir); // Jika ada subdirektori di lapisan dalam, tambahkan ke antrian} else {System.out.println ("File ------->"+subdir.getAbsolutePath ()); }}}}}}}}} class antrian <E> {private LinkedList <E> LinkedList; Queue () {linkedList = new LinkedList <E> (); } public void add (e e) {linkedlist.addfirst (e); // lanjutan} public e get () {return linkedList.removelast (); // pertama out} public boolean isnull () {return linkedlist.isempty (); }}4.3 Contoh 3: Struktur pohon menampilkan file di seluruh direktori (rekursif)
Ide:
1. Daftar pertama direktori dan file tingkat pertama.
2. Jika itu adalah direktori, tambahkan simbol awalan yang membentuk bentuk pohon. Kemudian beralih melalui direktori ini, yang membutuhkan traversal rekursif.
impor java.io.*; kelas publik Treefiles {public static void main (string [] args) {file dir = file baru ("d:/a"); System.out.println (dir.getName ()); ListChilds (dir, 1); } public static void listchilds (file f, level int) {string prefix = ""; untuk (int i = 0; i <level; i ++) {prefix = "|"+awalan; } File [] file = f.listFiles (); untuk (file file: file) {if (file.isDirectory ()) {system.out.println (prefix + file.getName ()); ListChilds (File, Level+1); } else {System.out.println (prefix + file.getName ()); }}}}Hasilnya adalah sebagai berikut:
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 Hapus seluruh direktori
impor java.io.*; kelas publik fileDeLete {public static void main (string [] args) {file file = file baru ("d:/a"); rm (file); } public static void rm (file f) {if (! f.exists ()) {System.out.println ("File tidak ditemukan!"); kembali; } else if (f.isfile ()) {f.delete (); kembali; } File [] dir = f.listFiles (); untuk (file file: dir) {rm (file); } f.delete (); }}Meringkaskan
Di atas adalah daftar file direktori Display Java dan direktori hapus yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!