Sobes.tech
Junior

Шумо чӣ мегӯед дар бораи интерфейси FileFilter?

sobes.tech AI

Ҷавоб аз AI

FileFilter — гэта функцыянальны інтэрфейс у пакеце java.io, які выкарыстоўваецца для фільтрацыі файлаў на аснове зададзеных крытэрыяў. Ён мае адзін абстрактны метад: boolean accept(File pathname).

Сігнатура метаду:

// Правярае, ці падыходзіць указаны шлях да імя файла.
boolean accept(File pathname);

Метад accept(File pathname) вяртае true, калі файл або каталог, прадстаўлены аб'ектам pathname, адпавядаюць умовам фільтра, і false у супрацьлеглым выпадку.

FileFilter часта выкарыстоўваецца ў метадах, якія працуюць са спісамі файлаў, такіх як:

  • list(FileFilter filter) у класе File.
  • listFiles(FileFilter filter) у класе File.

Прыклад выкарыстання для фільтрацыі толькі файлаў (выключаючы каталёгі):

import java.io.File;
import java.io.FileFilter;

public class OnlyFilesFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Цяперашні каталог

        // Ствараем FileFilter для прыняцця толькі файлаў
        FileFilter onlyFilesFilter = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isFile(); // Вяртае true, калі гэта файл
            }
        };

        // Выкарыстоўваем фільтр для атрымання спісу файлаў
        File[] fichiers = dir.listFiles(onlyFilesFilter);

        if (fichiers != null) {
            for (File fichier : fichiers) {
                System.out.println(fichier.getName());
            }
        }
    }
}

Выкарыстанне лямбда-выражэння (даступна з Java 8, бо FileFilter з'яўляецца функцыянальным інтэрфейсам):

import java.io.File;
import java.io.FileFilter;

public class LambdaFileFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Цяперашні каталог

        // Выкарыстоўваем лямбда-выражэнне ў якасці FileFilter
        File[] directories = dir.listFiles(pathname -> pathname.isDirectory()); // Фільтр для каталёгаў

        if (directories != null) {
            for (File directory : directories) {
                System.out.println(directory.getName());
            }
        }
    }
}

FileFilter дазваляе ствараць паўторна выкарыстоўваныя крытэрыі фільтрацыі для працы з файлавай сістэмай.