Reputation: 732
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"));
Upvotes: 1
Views: 4355
Reputation: 732
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);
}
}
Upvotes: 2