繁体   English   中英

isDirectory() 为文件返回 true

[英]isDirectory() returns true for a file

在我的 java 程序中,我复制了一个文件并删除了新文件。

在我的方法removeFile()我检查它是否是一个目录:

String fileName = "G:/1310628353186Examples.csv";
File f = new File(fileName);
if (f.isDirectory()) {
    System.out.println( "'" + fileName + "' is a directory" );
    String[] files = f.list();
    if (files != null && files.length > 0)
        throw new IllegalArgumentException("Delete: directory not empty: " + fileName);
}

有时我得到"'G:/1310628353186Examples.csv' is a directory" ,有时我没有。

当我调试代码并且f.isDirectory()true并且我检查f.isDirectory中的内容时,调试器说它是false

我在 Windows 7 Professional 上运行 Eclipse SDK 3.4.0 和 JDK 1.6。

您检查f是否是目录,但您打印fileName 所以也许你只是检查/打印错误的变量? 除非这只是您的问题中的错字。

如果文件是隐藏的,比如Documents中的My Music链接(windows 生成的快捷方式文件,它不是真正的快捷方式),那么它将作为 isdirectory 测试,但不会像目录那样 function; 您无法获得目录列表。 用户生成的快捷方式就像文件一样。

2013 年 5 月 31 日:在最近的更新中,“文档”中的“我的音乐”链接不再测试为 is_hidden。 但是,从“我的音乐”文件 object 获取的目录列表确实返回了 NULL,可以对其进行测试。

我在 OSX 上遇到了同样的问题。 我创建了一个常规文件, isDirectory() function 返回trueisFile()返回false (在任何地方都找不到任何证据表明 API 会出现这种行为)。

我在 OSX 上解决它的方法是从文件中手动读取属性,但您也不能使用BasicFileAttributes - 它也出于某种原因返回trueisDirectory()falseisRegularFile()

适用于 OSX:

PosixFileAttributes attr = Files.readAttributes(f.toPath(), PosixFileAttributes.class);

System.out.println("File "+f.getName()+
                   ": isDirectory="+(attr.isDirectory() ? "true" : "false")+
                   ", isRegularFile="+(attr.isRegularFile() ? "true" : "false"));

尝试添加检查以查看文件是否存在,如果文件不存在, isDirectory()也会返回 false:

if (f.exists() && f.isDirectory()) {

您必须使用 try/catch 块进行搜索,然后尝试它。

这似乎是由 Windows 引起的问题。 Linux没有这个问题。

暂无
暂无

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

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