Akh*_*bey 3 java file-io swing jtree filefilter
File f=new File("C:/");
File fList[] = f.listFiles();
Run Code Online (Sandbox Code Playgroud)
当我使用它时,它列出所有系统文件以及隐藏文件.
当我使用它在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]);
}
}
Run Code Online (Sandbox Code Playgroud)
我应该怎么做,以便它不提供NullPointerException并在jTree中只显示非隐藏和非系统文件?
Sot*_*lis 15
为隐藏文件执行此操作:
File root = new File(yourDirectory);
File[] files = root.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return !file.isHidden();
}
});
Run Code Online (Sandbox Code Playgroud)
这不会返回隐藏文件.
至于系统文件,我认为这是一个Windows概念,因此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());
}
});
Run Code Online (Sandbox Code Playgroud)
DosFileAttributes是在Java 7中引入的.