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!
java files find path stream
Commentami!