Using
'File.listFiles(FileNameFilter filter)' method, you can check whether given
files exist in a directory or not.
private
File[] getMatchedFiles(File file) {
File[] matches = file.listFiles(new
FilenameFilter() {
public boolean accept(File
dir, String name) {
return
fileNames.contains(name);
}
});
return matches;
}
Since
listFiles function do not traverse the sub directories, we need to traverse sub
directories explicitly to find all the matched files.
Find the
below working application.
FileSearch.java
package com.sample.app; import java.io.File; import java.io.FilenameFilter; import java.util.HashSet; import java.util.List; import java.util.Set; public class FileSearch { private File file; private List<String> fileNames; private Set<String> matchedFiles; public FileSearch(String folderPath, List<String> fileNames) { if (fileNames == null || fileNames.isEmpty()) { throw new IllegalArgumentException("fileNames can't be null or empty"); } File file = new File(folderPath); if (!file.exists() || !file.isDirectory()) { throw new IllegalArgumentException("File is not exists or not a directory"); } this.file = file; this.fileNames = fileNames; this.matchedFiles = new HashSet<> (); } private File[] getMatchedFiles(File file) { File[] matches = file.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return fileNames.contains(name); } }); return matches; } private void recursiveSearch(File path) { addMatchedFiles(getMatchedFiles(path)); for (File file : path.listFiles()) { if (file.isDirectory()) { recursiveSearch(file); } } } private void addMatchedFiles(File[] files) { for (File file : files) { matchedFiles.add(file.getName()); } } public Set<String> getMatchedFiles(){ recursiveSearch(this.file); return matchedFiles; } }
App.java
package com.sample.app; import java.util.Arrays; import java.util.Set; public class App { public static void main(String args[]) { FileSearch fileSearch = new FileSearch("/Users/krishna/Documents/TechnicalDocuments", Arrays.asList("sample.pdf", "123.pdf", "hello.txt")); Set<String> matchedFiles = fileSearch.getMatchedFiles(); for (String matchedFile : matchedFiles) { System.out.println(matchedFile); } } }
You may
like
No comments:
Post a Comment