English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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(メール送信時、#を@に置き換えてください。届出を行い、関連する証拠を提供してください。一旦確認が取れた場合、本サイトは即座に侵害が疑われる内容を削除します。)