繁体   English   中英

File.isDirectory和isFile均为false

[英]File.isDirectory and isFile both false

我正在编写一个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是/中的实际目录。 不是错字。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM