在java中遍歷一個資料夾裡邊的所有文件,可以有兩種方式:
一、遞迴遍歷
通常也是開發者第一時間能想到的方法。
遞歸遍歷的優點是:
實作起來相對簡單,程式碼量相對較少,執行效率較高。
缺點是:
比較吃內存,對硬體需求較高。
線上影片教學分享:java線上影片
具體演算法如下:
// 递归遍历 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()); } } }
二、非遞歸遍歷
具體想法:
遍歷一個資料夾的時候,如果是資料夾,就加入到linkedlist裡去,如果是檔案則列出。這樣該目錄的文件和資料夾就遍歷完畢了,資料夾全部被保存到linkedlist裡,所以剩下的就是遍歷linkedlist裡邊的資料夾的文件,遍歷方式同上邊的操作一致。
如果是資料夾就加入到linkedlist裡邊,當然每次從清單取出一個資料夾之後需要從清單中刪除該資料夾,這裡採用linkedlist.removeFirst()
來讀取,這樣是每次讀取清單的第一個元素並將其從清單中剔除。這樣只要遍歷到linkedlist的狀態是isEmty的時候就說明遍歷完畢了。
具體演算法如下:
/** * 非递归遍历 * @param file * @return */ public static LinkedList<File> GetDirectory(String path) { File file = new File(path); LinkedList<File> Dirlist = new LinkedList<File>(); // 保存待遍历文件夹的列表 LinkedList<File> fileList = new LinkedList<File>(); GetOneDir(file, Dirlist, fileList);// 调用遍历文件夹根目录文件的方法 File tmp; while (!Dirlist.isEmpty()) { tmp = (File) Dirlist.removeFirst(); // 从文件夹列表中删除第一个文件夹,并返回该文件夹赋给tmp变量 // 遍历这个文件夹下的所有文件,并把 GetOneDir(tmp, Dirlist, fileList); } return fileList; } // 遍历指定文件夹根目录下的文件 private static void GetOneDir(File file, LinkedList<File> Dirlist, LinkedList<File> fileList) { // 每个文件夹遍历都会调用该方法 File[] files = file.listFiles(); if (files == null || files.length == 0) { return; } for (File f : files) { if (f.isDirectory()) { Dirlist.add(f); } else { // 这里列出当前文件夹根目录下的所有文件,并添加到fileList列表中 fileList.add(f); // System.out.println("file==>" + f); } } }
相關文章教學推薦:java入門教學
以上是java實作遍歷某個目錄(包括子目錄)下的所有文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!