我正在编写一个列出目录内容的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 / games - 目录?假档案?假
/ storage / apps - 目录?假档案?假
/ storage / testfile - 目录?假档案?假
如果我列出/ storage目录中的文件,那么很明显,除了testfile之外的所有文件都是一个目录。
我做错了什么?
为避免混淆,/ storage是/中的实际目录。不是拼写错误。
答案 0 :(得分:1)
问题的原因是配置错误的访问权限 如果运行应用程序的用户没有执行权限,则isDirectory,isFile和exists将返回false。