[解決済み] Javaでディレクトリとそのサブディレクトリにあるファイルを反復処理するにはどうしたらいいですか?
2022-04-24 22:36:49
質問
あるディレクトリにあるすべてのファイルのリストを取得したいのですが、すべてのサブディレクトリにあるファイルも含めて取得する必要があります。Javaでディレクトリの反復処理を実現する標準的な方法は何ですか?
どのように解決するのですか?
を使用することができます。
File#isDirectory()
は、与えられたファイル(パス)がディレクトリであるかどうかをテストするために使用します。もしこれが
true
を使用すれば、同じメソッドを再度呼び出すだけです。
File#listFiles()
の結果になります。これは、次のように呼ばれます。
再帰
.
基本的なキックオフの例です。
package com.stackoverflow.q3154488;
import java.io.File;
public class Demo {
public static void main(String... args) {
File dir = new File("/path/to/dir");
showFiles(dir.listFiles());
}
public static void showFiles(File[] files) {
for (File file : files) {
if (file.isDirectory()) {
System.out.println("Directory: " + file.getAbsolutePath());
showFiles(file.listFiles()); // Calls same method again.
} else {
System.out.println("File: " + file.getAbsolutePath());
}
}
}
}
に対して敏感であることに注意してください。
StackOverflowError
ツリーがJVMのスタックが保持できるよりも深い場合。もし、あなたがすでにJava 8かそれ以降を利用しているなら、そのときは
Files#walk()
を使用する代わりに
末尾再帰
:
package com.stackoverflow.q3154488;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class DemoWithJava8 {
public static void main(String... args) throws Exception {
Path dir = Paths.get("/path/to/dir");
Files.walk(dir).forEach(path -> showFile(path.toFile()));
}
public static void showFile(File file) {
if (file.isDirectory()) {
System.out.println("Directory: " + file.getAbsolutePath());
} else {
System.out.println("File: " + file.getAbsolutePath());
}
}
}
関連
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] java.lang.UnsupportedClassVersionError を修正する方法。サポートされていないメジャー.マイナーバージョン
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
-
[解決済み】IntelliJ IDEAプロジェクトに外部jar(lib/*.jar)を追加するための正しい方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
java の例外が発生しました java
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
javaでよく使われる英単語
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
IDEA パッケージステートメントの欠落
-
このラインで複数のマーカーを解決する方法
-
[解決済み] JARファイル内のファイルを一覧表示するには?