How to delete all files, based on a specific character in filenames, using Java

1.7k Views Asked by At

I am wondering if there is a way to enhance the code below and not only match but also delete all files and directories that contain the "e" character in their name. Any help is appreciated!

Thank you in advance.

Here is the code:

import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

class Finder extends SimpleFileVisitor<Path> {
    private final PathMatcher matcher;
    Finder() {
        matcher = FileSystems.getDefault().getPathMatcher("glob:*e*");
    }

    //@Override 
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
        find(file);
        return FileVisitResult.CONTINUE;
    }

    //@Override 
    public FileVisitResult preVisitDirectory(Path file, BasicFileAttributes attrs) {
        find(file);
        return FileVisitResult.CONTINUE;
    }

    void find(Path file) {
        Path name = file.getFileName();
        if(matcher.matches(name)) {
            System.out.println("Matched file: " + file.getFileName());
        }
    }
}

public class FileVisitor2 {
    public static void main(String[] args) throws IOException {
        Finder finder = new Finder();
        Path p = Paths.get("C:\\Users\\El\\School\\DirMain");
        Files.walkFileTree(p, finder);
    }
}
1

There are 1 best solutions below

0
On

You could use apache commons library org.apache.commons.io.FileUtils to delete files/directory as this FileUtils.deleteQuitely() allows to delete non empty dirs as well.

 FileUtils.deleteQuietly(new File(path.toUri()));

something like below:

void find(Path file) {
    Path name = file.getFileName();
    if(matcher.matches(name)) {
        System.out.println("Matched file: " + file.getFileName());
        FileUtils.deleteQuietly(new File(file.toUri()));
    }
}