溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java怎么遍歷目錄下的所有文件

發(fā)布時(shí)間:2020-06-21 21:13:37 來源:億速云 閱讀:321 作者:鴿子 欄目:編程語言

在java中遍歷一個(gè)文件夾里邊的所有文件,可以有兩種方式:

一、遞歸遍歷

通常也是開發(fā)者第一時(shí)間能想到的方法。

遞歸遍歷的優(yōu)點(diǎn)是:

實(shí)現(xiàn)起來相對(duì)簡(jiǎn)單,代碼量相對(duì)較少,執(zhí)行效率較高。

缺點(diǎn)是:

比較吃內(nèi)存,對(duì)硬件要求較高。

具體算法如下:

// 遞歸遍歷
 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 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);// 調(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<File> Dirlist,
			LinkedList<File> 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)容,更多請(qǐng)關(guān)注億速云其它相關(guān)文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI