ホームページ  >  記事  >  Java  >  Java は、ディレクトリ (サブディレクトリを含む) 内のすべてのファイルの走査を実装します。

Java は、ディレクトリ (サブディレクトリを含む) 内のすべてのファイルの走査を実装します。

王林
王林転載
2019-11-30 13:27:406556ブラウズ

Java は、ディレクトリ (サブディレクトリを含む) 内のすべてのファイルの走査を実装します。

Java でフォルダー内のすべてのファイルを走査するには 2 つの方法があります:

1. 再帰的走査

#It通常、開発者が最初に思いつく方法はこれです。

再帰的トラバーサルの利点は次のとおりです。

実装が比較的簡単で、コードの量が比較的少なく、実行効率が高いです。

欠点は次のとおりです:

より多くのメモリを消費し、ハードウェア要件が高くなります。

オンライン ビデオ チュートリアルの共有:

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());
      }
  }
}

2. 非再帰的トラバーサル

具体的なアイデア:

フォルダーを移動するとき、フォルダーの場合はリンクリストに追加され、ファイルの場合はリストされます。このようにして、ディレクトリ内のファイルとフォルダーの走査が完了し、すべてのフォルダーがリンクリストに保存されたので、残っているのはリンクリスト内のフォルダー内のファイルを走査することです。走査方法は上記と同じです。以上の操作。

フォルダーの場合は、リンクリストに追加します。もちろん、リストからフォルダーを取り出すたびに、そのフォルダーをリストから削除する必要があります。ここでは、

linkedlist.removeFirst () は読み取りに使用されます。Take は、毎回リストの最初の要素を読み取り、リストから削除します。このようにして、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。