Java File.isDirectory和isFile都为false
我正在编写一个java应用程序,它列出目录内容。 在列出目录时,.isDirectory()方法的行为对于项返回false,我很确定是目录Java File.isDirectory和isFile都为false,java,Java,我正在编写一个java应用程序,它列出目录内容。 在列出目录时,.isDirectory()方法的行为对于项返回false,我很确定是目录 public List<DefaultMutableTreeNode> getNodes(String path) { List<DefaultMutableTreeNode> nodes = new ArrayList<>(); File directory = new File(path).getAb
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;
}
其输出为:
/存储/其他-目录?假文件?假/存储/游戏-目录?假文件?假
/存储/应用程序-目录?假文件?假
/存储/测试文件-目录?假文件?假
如果我列出/storage目录中的文件,那么很明显,除了testfile之外,其他所有文件都是一个目录 我做错了什么
为了避免混淆,/storage是/中的实际目录。不是打字错误。问题的原因是访问权限配置不当。
如果运行应用程序的用户没有执行权限,isDirectory、isFile和exists将返回false。是否确定
item.exists()
为true/storage/other
是一个绝对路径,而您可能需要storage/other
的相对路径(注意开始时缺少/
)。在调用此方法之前,我将工作目录更改为/storage,因此在“可选”中的路径是正确的循环我只是想看看工作目录是否真的发生了变化,因此是绝对路径。绝对路径是相对于整个文件系统的,而不是相对于您的工作目录的。虽然这是真的,但如果我站在/directory中,检查此处包含的项的绝对路径,绝对路径将是/directory/item。
for (File item : contents)
{
System.out.printf("%s - directory? %b file? %b %n", item.getAbsoluteFile().getPath(), item.isDirectory(), item.isFile());
}