java显示目录文件列表和删除目录
生活随笔
收集整理的這篇文章主要介紹了
java显示目录文件列表和删除目录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以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.java4.1 示例1:列出整個目錄中的文件(遞歸)
思路:
1.遍歷目錄d:\a。
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(); //此處開始代碼重復,且邏輯上可能會無限遞歸下去if (dir_1.isDirectory()) {....}} else {System.out.println(list.getAbsolutePath());} }對重復的代碼部分進行封裝,于是使用遞歸方法,既封裝代碼,又解決無限遞歸問題。最終代碼如下:
import 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(File dir) {File[] file_list = dir.listFiles();for (File file : 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.這樣一來,只要發現目錄,就會一直遍歷下去,直到某個目錄整個都遍歷完,開始遍歷下一個同級目錄。
需要考慮的是使用什么樣的集合。首先集合內目錄元素無需排序、不同目錄內子目錄名可能重復,因此使用List集合而非set集合,又因為頻繁增刪元素,因此使用linkedlist而非arraylist集合,linkedlist集合最突出的特性就是FIFO隊列。
相比于遞歸遍歷,使用隊列遍歷目錄的好處是元素放在容器中,它們都在堆內存中,不容易內存溢出。
import java.util.*; import java.io.*;public class ListAllFiles2 {public static void main(String[] args) {File dir = new File("d:/a");Queue<File> file_queue = new Queue<File>(); //構建一個隊列File[] list = dir.listFiles();for (File file : list) { //遍歷頂級目錄if(file.isDirectory()) {System.out.println("dir------>"+file.getAbsolutePath());file_queue.add(file);} else {System.out.println("file------>"+file.getAbsolutePath());}}while (!file_queue.isNull()) { //從二級子目錄開始,逐層遍歷File subdirs = file_queue.get(); //先取得二級子目錄名稱File[] subFiles = subdirs.listFiles(); for (File subdir : subFiles) { //遍歷每個下一級子目錄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); //先進}public E get() {return linkedlist.removeLast(); //先出}public boolean isNull() {return linkedlist.isEmpty();} }4.3 示例3:樹形結構顯示整個目錄中的文件(遞歸)
思路:
1.先列出一級目錄和文件。
2.如果是目錄,則加一個構成樹形的前綴符號。然后再遍歷這個目錄,在此需要遞歸遍歷。
結果如下:
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.java4.4 刪除整個目錄
import java.io.*;public class FileDelete {public static void main(String[] args) {File file = new File("d:/a");rm(file);}public static void rm(File f) {if(!f.exists()){System.out.println("file not found!");return;} else if(f.isFile()) {f.delete();return;}File[] dir = f.listFiles();for(File file : dir) {rm(file);}f.delete();} }注:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!
總結
以上是生活随笔為你收集整理的java显示目录文件列表和删除目录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mogilefs杂记(2)
- 下一篇: axios 的简单使用