Метод list() класса Java File
File.list()находится в Javajava.io.Fileметод экземпляра, предоставляемый классом и используемый для получения списка имён всех файлов и подкаталогов в указанном каталоге.
Синтаксис метода
Возвращаемое значение метода
list()Метод возвращает массив строк (String[]), который содержит следующее:
- Если вызывающий объект представляет допустимый каталог, возвращает имена всех файлов и подкаталогов в этом каталоге
- Если вызывающий объект не представляет каталог или возникает ошибка ввода-вывода, возвращает
null - Если каталог пуст, возвращает пустой массив
Пример базового использования
Пример
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()метода, который может принимать фильтр:
Пример
FilenameFilter
FilenameFilterявляется функциональным интерфейсом, который содержит только один метод:
Пример
Пример использования фильтра
Пример
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+ можно использовать лямбда-выражения как сокращение
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 - Символические ссылки:
list()Метод следует по символическим ссылкам и может возвращать фактические имена файлов/каталогов, на которые указывают ссылки - Соображения по производительности: Для каталога, содержащего большое количество файлов,
list()метод может потреблять больше памяти - Относительные пути: Возвращаемые имена файлов включают только часть с именем, а не полный путь
Альтернативные методы
В Java 7 и выше рекомендуется использоватьFilesклассы иDirectoryStreamдля работы с содержимым каталога, так как они предоставляют более современный и гибкий способ:
Пример
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