我正在编写一个java应用程序,它列出了目录内容。 当涉及到列出目录时,.isDirectory() 方法的行为对于项目返回 false,我很确定是目录。
public List<DefaultMutableTreeNode> getNodes(String path)
{
List<DefaultMutableTreeNode> nodes = new ArrayList<>();
File directory = new File(path).getAbsoluteFile();
File[] contents = directory.listFiles();
for (File item : contents)
{
if (item.isDirectory())
{
DefaultMutableTreeNode node = new DefaultMutableTreeNode(item.getName());
node.add(new DefaultMutableTreeNode("Placeholder..."));
nodes.add(node);
}
else
{
nodes.add(new DefaultMutableTreeNode(item.getName()));
}
}
return nodes;
}
上面的代码总是运行到else分支。 如果我替换循环,我会得到更奇怪的结果:
for (File item : contents)
{
System.out.printf("%s - directory? %b file? %b %n", item.getAbsoluteFile().getPath(), item.isDirectory(), item.isFile());
}
其输出是:
/storage/other - 目录?假文件?假
/存储/游戏 - 目录?假文件?假
/storage/apps - 目录?假文件?假
/storage/testfile - 目录?假文件?假
如果我列出/storage 目录中的文件,很明显,除了 testfile 之外的所有文件都是一个目录。
我做错了什么?
<小时/>为了避免混淆,/storage 是/中的实际目录。不是打字错误。
最佳答案
问题的原因是访问权限配置错误。
如果运行应用程序的用户没有执行权限,isDirectory、isFile 和 Exists 将返回 false。
关于java - File.isDirectory 和 isFile 均为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22445182/