日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java显示目录文件列表和删除目录

發布時間:2025/3/17 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.java

4.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.如果是目錄,則加一個構成樹形的前綴符號。然后再遍歷這個目錄,在此需要遞歸遍歷。

import 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(File f,int level) {String prefix = "";for(int i=0;i<level;i++) {prefix = "| " + prefix;}File[] files = f.listFiles();for (File file : files) {if(file.isDirectory()) {System.out.println(prefix + file.getName());listChilds(file,level+1);} else {System.out.println(prefix + 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 刪除整個目錄

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显示目录文件列表和删除目录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。