d:/aディレクトリを例として、D:/Aディレクトリの構造が次のとおりであると仮定して、次のとおりです。
d:/a | -a.sql | - back.log | - b | | -e | | -1.txt | | -2.txt | | -3.txt | ` - f | | -4.txt | | -5.txt | `-6.txt | -c | | -e | | -ace1.txt | | -ace2.txt | | -ace3.txt | ` - f | | -4.txt | | -5.txt | `-6.txt` - d | -a.java | -abc(1).txt | -abc(2).txt | -abc(3).txt | -b.java` -c.java
4.1例1:ディレクトリ全体にファイルをリストします(再帰)
アイデア:
1.ディレクトリD:/aを移動します。
2。d:/aのディレクトリに移動するたびに、このサブディレクトリを繰り返します。したがって、各要素が通過することがディレクトリであるかどうかを判断する必要があります。
通常のコードから再帰コードまでのコードの一部は次のとおりです。
file dir = new file( "d:/a"); file [] file_list = dir.listfiles(); for(file list:file_list){if(list.isdirectory()){file dir_1 = list.listfiles(); //コードはここから開始され、(dir_1.isdirectory()){....}} else {system.out.println(list.getabsolutepath()); }}繰り返されるコードパーツはカプセル化されているため、再帰的な方法を使用してコードをカプセル化し、無限の再帰問題を解決します。最終コードは次のとおりです。
Import Java.io。 System.out.println( "dir ------>"+dir.getabsolutepath()); listall(dir); } public static void listall(file dir){file [] file_list = dir.listfiles(); for(file:file_list){if(file.isdirectory()){system.out.println( "dir ------>"+file.getabsolutepath()); listall(file); } else {system.out.println( "file ------>"+file.getabsolutepath()); }}}}4.2例2:ディレクトリ全体にファイル(キュー)をリスト(キュー)
アイデア:
1。指定されたディレクトリを反復します。コレクションに通過したディレクトリ名を置きます。
2。コレクション内の各ディレクトリ要素を反復し、トラバースされたサブディレクトリをコレクションに追加します。最後に、各トラバーサルの後にコレクションから削除します。
3.このように、ディレクトリが見つかっている限り、特定のディレクトリが横断され、同じレベルの次のディレクトリが横断され始めるまで、それは通過し続けます。
考慮すべきことは、どのようなコレクションを使用するかです。まず、コレクションのディレクトリ要素をソートする必要はなく、異なるディレクトリのサブディレクトリ名を繰り返すことができます。したがって、リストコレクションは、セットコレクションの代わりに使用されます。要素が頻繁に追加および削除されるため、ArrayListコレクションの代わりにLinkedListが使用されます。 LinkedListコレクションの最も顕著な機能は、FIFOキューです。
再帰的なトラバーサルと比較して、キューを使用してディレクトリをトラバースする利点は、要素がコンテナに配置され、すべてヒープメモリにあることです。
import java.util。*; import java.io。*; public class listallfiles2 {public static void main(string [] args){file dir = new file( "d:/a"); queue <file> file_queue = new queue <file>(); //キューファイルを作成します[] list = dir.listfiles(); for(file file:list){//トップレベルのディレクトリをトランサーしますif(file.isdirectory()){system.out.println( "dir ----->"+file.getabsolutepath()); file_queue.add(file); } else {system.out.println( "file ------>"+file.getabsolutepath()); }} while(!file_queue.isnull()){//セカンダリサブディレクトリから開始、traverse file subdirs = file_queue.get(); //最初にセカンダリサブディレクトリ名ファイルを取得します[] subfiles = subdirs.listfiles(); for(file subdir:subfiles){//各次のレベルのsubdirectory if(subdir.isdirectory()){system.out.println( "dir ------>"+subdir.getabsolutepath(); file_queue.add(subdir); //内側のレイヤーにサブディレクトリがある場合は、キューに追加} else {system.out.println( "file ------->"+subdir.getabsolutepath()); }}}}}}}}}} class queue <e> {private linkedlist <e> linkedList; queue(){linkedlist = new linkedlist <e>(); } public void add(e e){linkedlist.addfirst(e); // advanced} public e get(){return linkedlist.removelast(); // first out} public boolean isnull(){return linkedlist.isempty(); }}4.3例3:ツリー構造はディレクトリ全体にファイルを表示します(再帰)
アイデア:
1.最初のレベルのディレクトリとファイルを最初にリストします。
2。ディレクトリの場合は、ツリー形状を形成するプレフィックスシンボルを追加します。次に、このディレクトリを繰り返します。これには、再帰トラバーサルが必要です。
Import Java.io。 System.out.println(dir.getName()); ListChilds(dir、1); } public static void listChilds(file f、int level){string prefix = ""; for(int i = 0; i <level; i ++){prefix = "|"+prefix; } file [] files = f.listfiles(); for(file file:files){if(file.isdirectory()){system.out.println(prefix + file.getName()); listChilds(ファイル、レベル+1); } else {system.out.println(prefix + file.getName()); }}}}結果は次のとおりです。
a | a.sql | b | | E | | 1.txt | | | 2.txt | | | 3.txt | | f | | 4.txt | | | 5.txt | | | 6.txt | back.log | c | | E | | | ace1.txt | | | Ace2.txt | | | ace3.txt | | f | | | 4.txt | | | 5.txt | | | 6.txt | d | | A.Java | | ABC(1).txt | | ABC(2).txt | | ABC(3).txt | | B.Java | | C.Java
4.4ディレクトリ全体を削除します
Import Java.io。 rm(file); } public static void rm(file f){if(!f.exists()){system.out.println( "ファイルが見つかりません!");戻る; } else if(f.isfile()){f.delete();戻る; } file [] dir = f.listfiles(); for(file file:dir){rm(file); } f.delete(); }}要約します
上記は、編集者が紹介したJava Displayディレクトリファイルリストと削除ディレクトリです。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!