簡體   English   中英

如何僅列出jtree中的非隱藏文件和非系統文件

[英]How to list only non hidden and non system file in jtree

File f=new File("C:/");
File fList[] = f.listFiles();

當我使用它時,它會列出所有系統文件以及隱藏文件。

當我使用它在jTree中顯示時,這會導致空指針異常

 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]);
     }
}

我應該怎么做才能使其不給出NullPointerException並僅在jTree中顯示非隱藏文件和非系統文件

對隱藏文件執行此操作:

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

這不會返回隱藏文件。

至於系統文件,我相信這是Windows概念,因此嘗試獨立於系統的File接口可能不支持該File 但是,您可以使用命令行命令(如果存在)。

或使用@Reimeus的答案。

可能喜歡

    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是Java 7中引入的。

如果在Windows上運行,則Java 7引入了DosFileAttributes ,它可以過濾系統文件和隱藏文件。 可以與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());

如果要列出C:/中的所有文件,請記住,還有其他文件既不是隱藏文件也不是系統文件,但由於需要特殊特權/權限,因此仍然無法打開。 所以:

String[] files = file.list();

if (files!=null) {
    for (String f : files) open(f);
}

因此,只需比較數組是否為空,然后設計遞歸即可跳過list()函數的數組為空的那些文件。

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);
        }
    }
}

這是我用於使用jtree創建窗口文件瀏覽器的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM