Java File list() メソッド
File.list()は Java のjava.io.Fileクラスが提供するインスタンスメソッドで、指定されたディレクトリ内のすべてのファイルとサブディレクトリの名前リストを取得するために使用されます。このメソッドは、ディレクトリの内容を走査または処理する必要があるシナリオで非常に便利です。
メソッド構文
public String[] list()
メソッドの戻り値
list()メソッドは文字列配列(String[])を返し、次の内容を含みます:
- 呼び出しオブジェクトが有効なディレクトリを表す場合、そのディレクトリ内のすべてのファイルとサブディレクトリの名前を返します。
- 呼び出しオブジェクトがディレクトリを表さない場合、または I/O エラーが発生した場合は、null を返します。
null - ディレクトリが空の場合は、空の配列を返します。
基本的な使用例
例
import java.io.File;
public class ListFilesExample {
public static void main(String[] args) {
// ディレクトリを表す File オブジェクトを作成します
File directory = new File("C:/MyFolder");
// ディレクトリ内のファイルとサブディレクトリのリストを取得します
String[] files = directory.list();
// リストが正常に取得されたかどうかを確認します
if (files != null) {
System.out.println("ディレクトリの内容:");
for (String file : files) {
System.out.println(file);
}
} else {
System.out.println("指定されたパスはディレクトリではないか、エラーが発生しました");
}
}
}
public class ListFilesExample {
public static void main(String[] args) {
// ディレクトリを表す File オブジェクトを作成します
File directory = new File("C:/MyFolder");
// ディレクトリ内のファイルとサブディレクトリのリストを取得します
String[] files = directory.list();
// リストが正常に取得されたかどうかを確認します
if (files != null) {
System.out.println("ディレクトリの内容:");
for (String file : files) {
System.out.println(file);
}
} else {
System.out.println("指定されたパスはディレクトリではないか、エラーが発生しました");
}
}
}
メソッドのオーバーロード版
Fileクラスは別のバージョンのlist()メソッドを提供しており、フィルタを受け付けることができます:
例
public String[] list(FilenameFilter filter)
FilenameFilter インターフェース
FilenameFilterは関数型インターフェースであり、1つのメソッドのみを含みます:
例
boolean accept(File dir, String name)
フィルタを使用した例
例
import java.io.File;
import java.io.FilenameFilter;
public class FilteredListExample {
public static void main(String[] args) {
File directory = new File("C:/MyFolder");
// .txt ファイルのみを一覧表示します
String[] textFiles = directory.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
});
// Java 8+ では Lambda 式を使って簡略化できます
String[] textFiles = directory.list((dir, name) -> name.endsWith(".txt"));
if (textFiles != null) {
System.out.println("テキストファイルのリスト:");
for (String file : textFiles) {
System.out.println(file);
}
}
}
}
import java.io.FilenameFilter;
public class FilteredListExample {
public static void main(String[] args) {
File directory = new File("C:/MyFolder");
// .txt ファイルのみを一覧表示します
String[] textFiles = directory.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
});
// Java 8+ では Lambda 式を使って簡略化できます
String[] textFiles = directory.list((dir, name) -> name.endsWith(".txt"));
if (textFiles != null) {
System.out.println("テキストファイルのリスト:");
for (String file : textFiles) {
System.out.println(file);
}
}
}
}
注意事項
- 権限の問題:プログラムにディレクトリの読み取り権限がない場合、
list()メソッドは null を返しますnull - シンボリックリンク:
list()メソッドはシンボリックリンクに従い、リンクが指す実際のファイル/ディレクトリ名を返す場合があります。 - パフォーマンスの考慮事項:多数のファイルを含むディレクトリの場合、
list()メソッドは多くのメモリを消費する可能性があります - 相対パス:返されるファイル名は名前部分のみを含み、完全なパスは含まれません
代替方法
Java 7 以降では、使用することをお勧めしますFilesクラスとDirectoryStreamを使用してディレクトリの内容を処理します。これらはより現代的で柔軟な方法を提供します:
例
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class NioListExample {
public static void main(String[] args) throws IOException {
Path dir = Paths.get("C:/MyFolder");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
for (Path file : stream) {
System.out.println(file.getFileName());
}
}
}
}
import java.nio.file.Path;
import java.nio.file.Paths;
public class NioListExample {
public static void main(String[] args) throws IOException {
Path dir = Paths.get("C:/MyFolder");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
for (Path file : stream) {
System.out.println(file.getFileName());
}
}
}
}
まとめ
File.list()メソッドは、ディレクトリの内容を取得するためのシンプルで直接的な方法であり、単純なファイルシステム操作に適しています。より複雑な要件の場合は、使用を検討できますFilenameFilterまたは、NIO.2 API が提供するより強力な機能に切り替えることもできます。
Java File