Метод list() класса Java File

Java File Java File


File.list()находится в Javajava.io.Fileметод экземпляра, предоставляемый классом и используемый для получения списка имён всех файлов и подкаталогов в указанном каталоге.

Синтаксис метода

public String[] list()

Возвращаемое значение метода

list()Метод возвращает массив строк (String[]), который содержит следующее:

  • Если вызывающий объект представляет допустимый каталог, возвращает имена всех файлов и подкаталогов в этом каталоге
  • Если вызывающий объект не представляет каталог или возникает ошибка ввода-вывода, возвращает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("Указанный путь не является каталогом или произошла ошибка");
        }
    }
}

Версия перегрузки метода

FileКласс также предоставляет другую версиюlist()метода, который может принимать фильтр:

Пример

public String[] list(FilenameFilter filter)

FilenameFilter

FilenameFilterявляется функциональным интерфейсом, который содержит только один метод:

Пример

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+ можно использовать лямбда-выражения как сокращение
        String[] textFiles = directory.list((dir, name) -> name.endsWith(".txt"));
       
        if (textFiles != null) {
            System.out.println("Список текстовых файлов:");
            for (String file : textFiles) {
                System.out.println(file);
            }
        }
    }
}

Примечания

  1. Проблемы с разрешениями: Если у программы нет разрешения на чтение каталога,list()метод вернётnull
  2. Символические ссылки:list()Метод следует по символическим ссылкам и может возвращать фактические имена файлов/каталогов, на которые указывают ссылки
  3. Соображения по производительности: Для каталога, содержащего большое количество файлов,list()метод может потреблять больше памяти
  4. Относительные пути: Возвращаемые имена файлов включают только часть с именем, а не полный путь

Альтернативные методы

В 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());
            }
        }
    }
}

Итог

File.list()Метод — это простой и прямой способ получить содержимое каталога, подходящий для простых операций файловой системы. Для более сложных задач рассмотрите использованиеFilenameFilterили обратитесь к более мощным возможностям, предоставляемым NIO.2 API.

Java File Java File

Другие расширения