File.isDirectory和isFile都是false

时间:2014-03-17 00:45:53

标签: java

我正在编写一个列出目录内容的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是/中的实际目录。不是拼写错误。

1 个答案:

答案 0 :(得分:1)

问题的原因是配置错误的访问权限 如果运行应用程序的用户没有执行权限,则isDirectory,isFile和exists将返回false。