I have a directory:
File dir = new File(MY_PATH);
I would like to list all the files whose name is indicated as integer numbers strings, e.g. "10", "20".
I know I should use:
dir.list(FilenameFilter filter);
How to define my FilenameFilter
?
P.S. I mean the file name could be any integer string, e.g. "10" or "2000000" or "3452345". No restriction in the number of digits as long as the file name is a integer string.
You should override accept
in the interface FilenameFilter
and make sure that the parameter name
has only numeric chars. You can check this by using matches
:
String[] list = dir.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.matches("[0-9]+"); } });
preferably as an instance of an anonymous inner class passsed as parameter to File#list.
for example, to list only files ending with the extension .txt
:
File dir = new File("/home"); String[] list = dir.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".txt"); } });
To list only files whose filenames are integers of exactly 2 digits you can use the following in the accept method:
return name.matches("\\d{2}");
for one or more digits:
return name.matches("\\d+");
EDIT (as response to @crashprophet's comment)
Pass a set of extensions of files to list
class ExtensionAwareFilenameFilter implements FilenameFilter { private final Set<String> extensions; public ExtensionAwareFilenameFilter(String... extensions) { this.extensions = extensions == null ? Collections.emptySet() : Arrays.stream(extensions) .map(e -> e.toLowerCase()).collect(Collectors.toSet()); } @Override public boolean accept(File dir, String name) { return extensions.isEmpty() || extensions.contains(getFileExtension(name)); } private String getFileExtension(String filename) { String ext = null; int i = filename .lastIndexOf('.'); if(i != -1 && i < filename .length()) { ext = filename.substring(i+1).toLowerCase(); } return ext; } } @Test public void filefilter() { Arrays.stream(new File("D:\\downloads"). list(new ExtensionAwareFilenameFilter("pdf", "txt"))) .forEach(e -> System.out.println(e)); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With