在java中遍歷一個(gè)文件夾里邊的所有文件,可以有兩種方式:
一、遞歸遍歷
創(chuàng)新互聯(lián)是一家專業(yè)提供曲陽企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、成都做網(wǎng)站、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為曲陽眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
通常也是開發(fā)者第一時(shí)間能想到的方法。
遞歸遍歷的優(yōu)點(diǎn)是:
實(shí)現(xiàn)起來相對簡單,代碼量相對較少,執(zhí)行效率較高。
缺點(diǎn)是:
比較吃內(nèi)存,對硬件要求較高。
具體算法如下:
// 遞歸遍歷 private void getDirectory(File file) { File flist[] = file.listFiles(); if (flist == null || flist.length == 0) { return 0; } for (File f : flist) { if (f.isDirectory()) { //這里將列出所有的文件夾 System.out.println("Dir==>" + f.getAbsolutePath()); getDirectory(f); } else { //這里將列出所有的文件 System.out.println("file==>" + f.getAbsolutePath()); } } }
二、非遞歸遍歷
具體思路:
遍歷一個(gè)文件夾的時(shí)候,如果是文件夾,就添加到linkedlist里去,如果是文件則列出。這樣該目錄的文件和文件夾就遍歷完畢了,文件夾全部被保存到linkedlist里,所以剩下的就是遍歷linkedlist里邊的文件夾的文件,遍歷方式同上邊的操作一致。
如果是文件夾就添加到linkedlist里邊,當(dāng)然每次從列表取出一個(gè)文件夾之后需要從列表中刪除該文件夾,這里采用linkedlist.removeFirst()
來讀取,這樣是每次讀取列表的第一個(gè)元素并將其從列表剔除。這樣只要遍歷到linkedlist的狀態(tài)是isEmty的時(shí)候就說明遍歷完畢了。
具體算法如下:
/** * 非遞歸遍歷 * @param file * @return */ public static LinkedListGetDirectory(String path) { File file = new File(path); LinkedList Dirlist = new LinkedList (); // 保存待遍歷文件夾的列表 LinkedList fileList = new LinkedList (); GetOneDir(file, Dirlist, fileList);// 調(diào)用遍歷文件夾根目錄文件的方法 File tmp; while (!Dirlist.isEmpty()) { tmp = (File) Dirlist.removeFirst(); // 從文件夾列表中刪除第一個(gè)文件夾,并返回該文件夾賦給tmp變量 // 遍歷這個(gè)文件夾下的所有文件,并把 GetOneDir(tmp, Dirlist, fileList); } return fileList; } // 遍歷指定文件夾根目錄下的文件 private static void GetOneDir(File file, LinkedList Dirlist, LinkedList fileList) { // 每個(gè)文件夾遍歷都會(huì)調(diào)用該方法 File[] files = file.listFiles(); if (files == null || files.length == 0) { return; } for (File f : files) { if (f.isDirectory()) { Dirlist.add(f); } else { // 這里列出當(dāng)前文件夾根目錄下的所有文件,并添加到fileList列表中 fileList.add(f); // System.out.println("file==>" + f); } } }
以上就是java實(shí)現(xiàn)遍歷某個(gè)目錄(包括子目錄)下的所有文件的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!