1. Javaのフォルダー内のすべてのファイルをトラバースする2つの方法があります。
1。再帰的なトラバーサルは、通常、開発者が考えることができる最初の方法です。再帰トラバーサルの利点は次のとおりです。実装するのは比較的簡単で、コードの量は比較的少なく、実行効率が高くなっています。欠点は、より多くのメモリを消費し、高いハードウェアを必要とすることです。
// private 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に追加され、ファイルの場合はリストされます。このようにして、ディレクトリ内のファイルとフォルダーが通信され、すべてのフォルダーがインクエドリストのLに保存されます。したがって、残っているのは、LinkedListでファイルを通過することです。トラバーサル法は、上記の操作と同じです。フォルダーの場合、LinkedListに追加されます(PS:トラバーサルプロセス中のLinkedListは常に同じリストです)。もちろん、各フォルダーがリストから削除された後、フォルダーをリストから削除する必要があります。リストの最初の要素が読み取り、リストから削除されるように、読み取るLinkedList.RemoveFirst()があります。このようにして、LinkedList Isemtyの状態に移動する限り、トラバーサルが完了したことを意味します。
//非再帰トラバーサルプライベートvoid getDirectorySize(ファイルファイル){linkedlist list = new linkedlist(); // getonedirをトラバースするフォルダーのリストを保存(ファイル、リスト); while(!list.isempty()){tmp =(file)list.removefirst(); //この場所の判断は少し冗長ですが、保険のために、それはまだ判断です。通常、リストにはフォルダーのみがあります//しかし、特別なケースは除外されません。たとえば、フォルダー自体がスタックに押し込まれた後にファイルになります。 tmp.getabsolutepath());}}}} //指定されたフォルダープライベートvoid getonedirのルートディレクトリでファイルをトラバースします(ファイルファイル、linkedlistリスト){//このメソッドは各フォルダートラバーサルシステムに対して呼び出されます。 file.listfiles(); sumdir += 1; if(files == null || files.length == 0){file f:files){if(f.isdirectory()){list.add(f);} else {// f.getabsolutepath());}}}2。Javaを使用してフォルダーをトラバースし、その中のすべてのコンテンツを取得します
Package demo0823; 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 // getfiles(filepath); filepath){file root = new file(filepath); file [] files = root.listfiles(); for(file:files){if(file.isdirectory()){//ファイルがディレクトリである場合、フロアキャビネットを再帰的に呼び出す//再帰的に電話をかけますgetFiles(file.getabsolutepath()); filelist.add(file.getabsolutepath()); system.out.println( "すべてのサブディレクトリとそのファイルを「+filepath+" "+file.getabsolutepath()) "+filepath+" "+file.getabsolutepath());}}}} under subfiles複製画像:
要約します
上記は、Javaバックグラウンドフォルダー内のファイルのトラバースに関するこの記事の完全なコードです。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!