I am trying to print out my directories contained within a particular directory called “Books”. I am using a FilenameFilter interface to filter for directories only excluding files. My code is as below:
package dirspkg;
import java.io.File;
import java.util.Arrays;
import java.util.Objects;
import java.io.FilenameFilter;
public class DirectoryDemo {
public static void main(String... args) {
File directory = new File("C:/users/Dell/Desktop/Books");
Arrays.stream(Objects.requireNonNull(directory.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return dir.isDirectory() && dir.getName().startsWith("j");
}
}))).forEach(System.out::println);
}
}
The code is not outputting anything but I actually have directories beginning with “j” in the books directory. If I rewrite the code as below:
// imports are the same as above code
public class DirectoryDemo {
public static void main(String... args) {
File directory = new File("C:/users/Dell/Desktop/Books");
Arrays.stream(Objects.requireNonNull(directory.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return dir.isDirectory() && dir.getName().startsWith("j");
}
}))).forEach(System.out::println);
}
}
The above prints but also prints out files along with directories (including the ones that do not start with the letter j) which is not what I want. I simply want the directories beginning with the letter “j”. What am I doing wrong?