[英]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 返回true
, isFile()
返回false
。 (在任何地方都找不到任何证据表明 API 会出现这种行为)。
我在 OSX 上解决它的方法是从文件中手动读取属性,但您也不能使用BasicFileAttributes
- 它也出于某种原因返回true
为isDirectory()
和false
为isRegularFile()
。
适用于 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.