English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Javaのバックグラウンドフォルダー内のファイルの完全なコードで巡回する

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

1再帰的な巡回は、開発者が最初に思いつく方法です。再帰的な巡回の利点は、実装が比較的簡単で、コード量が少なく、実行効率が高いです。欠点は、メモリ消費が多いため、ハードウェア要求が高いです。

// 再帰的な巡回
 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再帰的な巡回は簡単に理解できますが、再帰的でない巡回は考え方が難しいかもしれません。私もしばらく苦悩しましたが、JavaのLinkedListというものがあることを発見しました。文字通りに言えば、リンクされたファイルのリストを保存するためのものです。これがあれば、簡単になります。具体的な考え方は以下の通りです:フォルダーを巡回する際に、フォルダーの場合はLinkedListに追加し、ファイルの場合はリストに表示します。これで、そのディレクトリのファイルとフォルダーは巡回が完了し、すべてのフォルダーがLinkedListに保存されます。残るのはLinkedListに保存されているフォルダーのファイルを巡回することです。操作方法は上記と同じです。フォルダーがあればLinkedListに追加します(Ps:巡回中のLinkedListは常に同じリストです)。ただし、リストからフォルダーを取り出した後は、リストから削除する必要があります。ここではLinkedList.removeFirst()を使用して、リストの最初の要素を読み取り、リストから削除します。LinkedListの状態がisEmpty()であることを確認すると、巡回が完了したことを意味します。

// 非递归遍历
private void GetDirectorySize(File file) {
	LinkedList list = new LinkedList();
	//保存待遍历文件夹的列表
	GetOneDir(file, list);
	//调用遍历文件夹根目录文件的方法
	File tmp;
	while (!list.isEmpty()) {
		tmp = (File) list.removeFirst();
		//这个地方的判断有点多余,但是为了保险起见,还是给出一个判断,正常情况下列表中只有文件夹
		//但是不排除特殊情况,例如:本身是文件夹的目标在压入堆栈之后变成了文件
		if (tmp.isDirectory()) {
			GetOneDirSize(tmp, list);
		} else {
			System.out.println("file==>"); + tmp.getAbsolutePath());
		}
	}
}
// 遍历指定文件夹根目录下的文件
private void GetOneDir(File file , LinkedList list){
	//每次遍历文件夹都会调用此方法
	System.out.println("Dir==>"); + f.getAbsolutePath());
	File[] files = file.listFiles();
	sumdir += 1;
	if (files == null || files.length == 0) {
		return ;
	}
	for (File f : files) {
		if (f.isDirectory()) {
			list.add(f);
		} else {
			//此处列出当前文件夹根目录下的所有文件
			System.out.println("file==>"); + f.getAbsolutePath());
		}
	}
}

二、使用Java遍历文件夹并获取其中的所有内容

package demo0;823;
import java.io.File;
import java.util.ArrayList;
public class FileTest {
	private static ArrayList<String> fileList = new ArrayList<String>();
	public static void main(String[] args) {
		String filepath = "G:\\Test\\icon";
		getFiles(filepath);
	}
	static void getFiles(String filepath){
		File root = new File(filepath);
		File[] files = root.listFiles();
		for (File file : files){
			if(file.isDirectory()){
				//fileがディレクトリの場合、再帰的に呼び出しを行います
				//再帰呼び出し
				getFiles(file.getAbsolutePath());
				fileList.add(file.getAbsolutePath());
				System.out.println("表示"+filepath+「すべてのサブディレクトリおよびファイル」+file.getAbsolutePath());
			} else{
				//フォルダーでない場合、その下のファイルを遍历します
				System.out.println("表示"+filepath+「すべてのサブファイル」+file.getAbsolutePath());
			}
		}
	}
}

画像:

まとめ

これで、Java バックエンドフォルダー内のファイルの全ての内容が示されています。皆様の参考になれば幸いです。興味を持たれた方は、本サイトの他の関連するトピックもご覧ください。不十分な点があれば、コメントをお願いします。皆様のサポートに感謝します!

声明:本文の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーにより自発的に貢献し、自己でアップロードされたものであり、本サイトは所有権を持ちません。また、人間による編集は行われていません。著作権侵害が疑われる内容を見つけた場合は、以下のメールアドレスまでご連絡ください:notice#oldtoolbag.com(メール送信時、#を@に置き換えてください。届出を行い、関連する証拠を提供してください。一旦確認が取れた場合、本サイトは即座に侵害が疑われる内容を削除します。)

基本教程
おすすめ