あるディレクトリ配下に存在するファイルをすべて出力したい場合、以下のようなコードとなる。 ディレクトリ配下のサブディレクトリも階層的にすべて検索して出力する。
以下の「root」ディレクトリを対象に階層的に検索してファイル名を出力する。
C:.
│ Sample.class
│ Sample.java
│
└─root
│ file1.txt
│
├─sub1
│ │ file2.txt
│ │
│ └─sub3
│ file4.txt
│
└─sub2
file3.txt
コード
import java.io.*;
public class Sample{
public static void main(String[] args){
dumpFile(new File("root"));
}
/** ファイル出力 */
private static void dumpFile(File file){
// ファイル一覧取得
File[] files = file.listFiles();
if(files == null){
return;
}
for (File tmpFile : files) {
// ディレクトリの場合
if(tmpFile.isDirectory()){
// 再帰呼び出し
dumpFile(tmpFile);
// ファイルの場合
}else{
System.out.println(tmpFile.getName());
}
}
}
}
出力結果
file1.txt
file2.txt
file4.txt
file3.txt
次にフォルダ名も含めて、階層的に出力してみる。階層が変わるときにインデントを付けている。
import java.io.*;
public class Sample{
public static void main(String[] args){
// 最初は階層を0で指定
dumpFile(new File("root"), 0);
}
/** ファイル出力(階層版) */
private static void dumpFile(File file, int level){
// ファイル一覧取得
File[] files = file.listFiles();
if(files == null){
return;
}
// インデント用の空白作成
StringBuilder sb = new StringBuilder();
for(int i = 0; i < level; i++){
sb.append(" ");
}
String indent = sb.toString();
System.out.println(indent + "/" + file.getName());
for (File tmpFile : files) {
// ディレクトリの場合
if(tmpFile.isDirectory()){
// 再帰呼び出し
dumpFile(tmpFile, level + 1);
// ファイルの場合
}else{
System.out.println(indent + " " + tmpFile.getName());
}
}
}
}
出力結果
/root
file1.txt
/sub1
file2.txt
/sub3
file4.txt
/sub2
file3.txt