Sobes.tech
Junior

Τι μπορείτε να μου πείτε για το interface 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());
            }
        }
    }
}

Χρήση εκφράσεων lambda (διαθέσιμες από Java 8, καθώς το FileFilter είναι μια λειτουργική διεπαφή):

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

public class LambdaFileFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Τρέχων κατάλογος

        // Χρησιμοποιούμε μια έκφραση lambda ως FileFilter
        File[] directories = dir.listFiles(pathname -> pathname.isDirectory()); // Φίλτρο για καταλόγους

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

Το FileFilter επιτρέπει τη δημιουργία επαναχρησιμοποιήσιμων κριτηρίων φιλτραρίσματος για εργασία με το σύστημα αρχείων.