Cercare files in Java con Files.find

Mattepuffo's logo
Cercare files in Java con Files.find

Cercare files in Java con Files.find

Il metodo Files.find() è disponibile già da Java 8, ed è molto comodo per cercare files usando diversi filtri.

Oggi vediamo quattro metodi, oguno con un fitro di ricerca diverso:

  • per nome
  • per estensione
  • per dimensione
  • per data di creazione

Ve li lascio qui sotto da studiare e perr prendere spunto:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileTime;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {

    public static void main(String[] args) {
        Path path = Paths.get("C:\Users\matteo\Desktop");
        try {
            System.out.println("CERCA PER NOME");
            cercaPerNome(path, "Cattura.PNG");

            System.out.println("------");
            System.out.println("CERCA PER ESTENSIONE");
            cercaPerEstensione(path, "PNG");

            System.out.println("------");
            System.out.println("CERCA PER DIMENSIONE");
            cercaPerDimensione(path, 2);

            System.out.println("------");
            System.out.println("CERCA PER DATA CREAZIONE");
            cercaPerCreazione(path, Instant.now().minus(2, ChronoUnit.DAYS));
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }

    public static void cercaPerNome(Path path, String nome) throws IOException {
        List<Path> result;
        try (Stream<Path> pathStream = Files.find(path, Integer.MAX_VALUE,
                (p, basicFileAttributes) -> {
                    if (Files.isDirectory(p) || !Files.isReadable(p)) {
                        return false;
                    }
                    return p.getFileName().toString().equalsIgnoreCase(nome);
                })
        ) {
            result = pathStream.collect(Collectors.toList());
            result.forEach(System.out::println);
        }
    }

    public static void cercaPerEstensione(Path path, String ext) throws IOException {
        List<Path> result;
        try (Stream<Path> pathStream = Files.find(path, Integer.MAX_VALUE,
                (p, basicFileAttributes) -> {
                    if (Files.isDirectory(p) || !Files.isReadable(p)) {
                        return false;
                    }
                    return p.getFileName().toString().endsWith(ext);
                })
        ) {
            result = pathStream.collect(Collectors.toList());
            result.forEach(System.out::println);
        }
    }

    public static void cercaPerDimensione(Path path, long size) throws IOException {
        List<Path> result;
        try (Stream<Path> pathStream = Files.find(path, Integer.MAX_VALUE,
                (p, basicFileAttributes) -> {
                    try {
                        if (Files.isDirectory(p) || !Files.isReadable(p)) {
                            return false;
                        }
                        return Files.size(p) >= size;
                    } catch (IOException e) {
                        System.err.println(e.getMessage());
                    }
                    return false;
                })
        ) {
            result = pathStream.collect(Collectors.toList());
            result.forEach(System.out::println);
        }
    }

    public static void cercaPerCreazione(Path path, Instant instant) throws IOException {
        List<Path> result;
        try (Stream<Path> pathStream = Files.find(path, Integer.MAX_VALUE,
                (p, basicFileAttributes) -> {
                    if (Files.isDirectory(p) || !Files.isReadable(p)) {
                        return false;
                    }

                    FileTime fileTime = basicFileAttributes.creationTime();
                    int i = fileTime.toInstant().compareTo(instant);
                    return i < 0;
                })
        ) {
            result = pathStream.collect(Collectors.toList());
            result.forEach(System.out::println);
        }
    }
}

Enjoy!


Condividi

Commentami!