How to list only non hidden and non system file in jtree

Akhilesh Dhar Dubey picture Akhilesh Dhar Dubey · Mar 26, 2013 · Viewed 12.8k times · Source
File f=new File("C:/");
File fList[] = f.listFiles();

When i use this it list all system file as well as hidden files.

and this cause null pointer exception when i use it to show in jTree like this:

 public void getList(DefaultMutableTreeNode node, File f) {
 if(f.isDirectory()) {
     DefaultMutableTreeNode child = new DefaultMutableTreeNode(f);
     node.add(child);
     File fList[] = f.listFiles();
     for(int i = 0; i  < fList.length; i++)
         getList(child, fList[i]);
     }
}

What should i do so that it do not give NullPointerException and show only non hidden and non system files in jTree?

Answer

Sotirios Delimanolis picture Sotirios Delimanolis · Mar 26, 2013

Do this for hidden files:

File root = new File(yourDirectory);
File[] files = root.listFiles(new FileFilter() {
    @Override
    public boolean accept(File file) {
        return !file.isHidden();
    }
});

This will not return hidden files.

As for system files, I believe that is a Windows concept and therefore might not be supported by File interface that tries to be system independent. You can use Command line commands though, if those exist.

Or use what @Reimeus had in his answer.

Possibly like

    File root = new File("C:\\");

    File[] files = root.listFiles(new FileFilter() {
        @Override
        public boolean accept(File file) {
            Path path = Paths.get(file.getAbsolutePath());
            DosFileAttributes dfa;
            try {
                dfa = Files.readAttributes(path, DosFileAttributes.class);
            } catch (IOException e) {
                // bad practice
                return false;
            }
            return (!dfa.isHidden() && !dfa.isSystem());
        }
    });

DosFileAttributes was introduced in Java 7.