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

后端 未结 3 1335
栀梦
栀梦 2021-01-20 16:51
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

相关标签:
3条回答
  • 2021-01-20 17:09

    If you are trying to list all files in C:/ please keep in mind that there are other files also which are neither hidden nor system files, but that still won't open because they require special privileges/permissions. So:

    String[] files = file.list();
    
    if (files!=null) {
        for (String f : files) open(f);
    }
    

    So just compare if the array is null or not and design your recursion in such a way that it just skips those files whose array for the list() function is null.

    private void nodes(DefaultMutableTreeNode top, File f) throws IOException {
    
    if (f.isDirectory()) {
        File[] listFiles = f.listFiles();
    
        if (listFiles != null) {
            DefaultMutableTreeNode b1[] = new DefaultMutableTreeNode[listFiles.length];
            for (int i = 0; i < b1.length; i++) {
                b1[i] = new DefaultMutableTreeNode(listFiles[i].toString());
                top.add(b1[i]);
                File g = new File(b1[i].toString());
                nodes(b1[i], g);
            }
        }
    }
    

    Here is the code I used to create a window file explorer using jtree.

    0 讨论(0)
  • 2021-01-20 17:27

    If running under Windows, Java 7 introduced DosFileAttributes which enables system and hidden files to be filtered. This can be used in conjunction with a FileFilter

    Path srcFile = Paths.get("myDirectory");
    DosFileAttributes dfa = Files.readAttributes(srcFile, DosFileAttributes.class);
    System.out.println("System File? " + dfa.isSystem());
    System.out.println("Hidden File? " + dfa.isHidden());
    
    0 讨论(0)
  • 2021-01-20 17:29

    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.

    0 讨论(0)
提交回复
热议问题