javaのディレクトリツリーを介して反復する
ディレクトリと協力する際の一般的なタスクの1つは、内部のすべてのファイルとディレクトリを繰り返すことです。指定されたディレクトリ。これには、ディレクトリツリー全体への包括的なアクセスを提供するサブディレクトリが含まれます。 Javaでは、この機能を達成するための標準的なアプローチがあります。ファイルがディレクトリまたはファイルを表すかどうかを判断するために使用されます。指定されたファイルがディレクトリである場合、ファイルとディレクトリのリストが含まれています。これは、listfiles()メソッドを使用して取得できます。
ディレクトリツリーを繰り返すための簡単なアプローチは、再帰を使用することです。次のスニペットはこの方法を示しています。 public class directoryiterator { public static void main(string [] args){ file directory = new file( "/path/to/dir"); showfiles(directory.listfiles()); } public static void showfiles(file [] files){ for(ファイル:ファイル){ if(file.isdirectory()){ system.out.println( "directory:" file.getabsolutepath()); showfiles(file.listfiles()); //再帰通話 } それ以外 { system.out.println( "file:" file.getabsolutepath()); } } } } このアプローチは、listfiles()によって返されたファイルのリストにshowfiles()を再帰的に呼び出すことで機能します。ただし、StackoverFlowerRorの例外を処理することが重要です。これは、JVMのスタックが処理するにはディレクトリツリーが深すぎる場合に発生する可能性があります。 ]
Java 8以降の場合、より効率的なアプローチはファイル#walk()を使用することです。このメソッドは、JVMスタックではなくメソッドコールスタックの反復状態を維持することにより、スタックフラワーロールの問題を避けるテール再帰を実装します。 java.nio.file.pathをインポートします。 java.nio.file.pathsをインポートします。 public class directoryiteratorwithjava8 { public static void main(string [] args)スロー例外{ path directory = paths.get( "/path/to/dir"); files.walk(directory).foreach(path-> showfile(path.tofile())); } public static void showfile(file file){ if(file.isdirectory()){ system.out.println( "directory:" file.getabsolutepath()); } それ以外 { system.out.println( "file:" file.getabsolutepath()); } } }ファイル#walk()指定されたディレクトリツリー内のファイルとディレクトリを表すパスオブジェクトのストリームを生成します。 foreach()メソッドを使用して、各パスオブジェクトを処理し、対応するファイルまたはディレクトリを表示します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3