简体   繁体   中英

How to Scan all drives to find specific file extension in Java?

I want to scan all disks in my pc to find notepad (.txt) files and copy them into newly created directory. How to do that ? If possible skip some of the folder under C like Windows.Currently I can only scan specific directory.

Thanks

         public void scanFolder(int depth, File file) {

    StringBuilder indent = new StringBuilder();
    String name = file.getName();
    String extension;
    String txtcheck = "txt";

;

    for (int i = 0; i < depth; i++) {
        indent.append(".");
    }

     //Pretty print for directories
    if (file.isDirectory()) {

        String seperator = indent.toString() + "|";
        if (isPrintName(name)) {


        }
    } 
       //Print file name
    else if (isPrintName(name)) {


        out2 = indent.toString() + file.getName();
        extension = name.substring(name.lastIndexOf(".") + 1, name.length());
        if (txtcheck.equals(extension)) {

            outs.add(out2);

        }

    }

    if (file.isDirectory()) {
        File[] files = file.listFiles();
        for (int i = 0; i < files.length; i++) {
            scanFolder(depth + 4, files[i]);
        }
    }

}

     scanFolder(0, new File("C:\\lefdef"));

I have done this here is the answer code below ;

import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.*;
import static java.nio.file.FileVisitResult.*;
import javax.swing.filechooser.FileSystemView;

 public class Find {

private static int finalTotal = 0;

public static class Finder
        extends SimpleFileVisitor<Path> {

    private final PathMatcher matcher;
    private int numMatches = 0;

    Finder(String pattern) {
        matcher = FileSystems.getDefault()
                .getPathMatcher("glob:" + pattern);
    }

    // Compares the glob pattern against
    // the file or directory name.
    void find(Path file) {
        Path name = file.getFileName();
        if (name != null && matcher.matches(name)) {
            numMatches++;
            System.out.println(file);
        }
    }

    // Prints the total number of
    // matches to standard out.
    void done() {
        System.out.println("Matched: "
                + numMatches);
        finalTotal = finalTotal + numMatches;
    }

    // Invoke the pattern matching
    // method on each file.
    @Override
    public FileVisitResult visitFile(Path file,
            BasicFileAttributes attrs) {
        find(file);
        return CONTINUE;
    }

    // Invoke the pattern matching
    // method on each directory.
    @Override
    public FileVisitResult preVisitDirectory(Path dir,
            BasicFileAttributes attrs) {
        find(dir);
        return CONTINUE;
    }

    @Override
    public FileVisitResult visitFileFailed(Path file,
            IOException exc) {
    //            System.err.println(exc);
        return CONTINUE;
    }
}

public static void main(String[] args)
        throws IOException {

    File[] paths;
    FileSystemView fsv = FileSystemView.getFileSystemView();

    paths = File.listRoots();

    for (File path : paths) {
        String str = path.toString();
        String slash = "\\";

        String s = new StringBuilder(str).append(slash).toString();

        Path startingDir = Paths.get(s);

        String pattern = "*.txt";

        Finder finder = new Finder(pattern);
        Files.walkFileTree(startingDir, finder);
        finder.done();

    }

    System.out.println("Total Matched Number of Files : " + finalTotal);

}

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM