在我的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"
,有时我不会。{/ p>
当我调试代码并且f.isDirectory()
为true
并检查f.isDirectory
中的内容时,调试器会说它是false
。
我在Windows 7 Professional上运行Eclipse SDK 3.4.0和JDK 1.6。
答案 0 :(得分:8)
您检查f
是否是目录,但是您打印fileName
。那么也许你只是检查/打印错误的变量?除非你的问题只是一个错字。
答案 1 :(得分:2)
尝试添加检查以查看文件是否存在,如果文件不存在,isDirectory()
也将返回false:
if (f.exists() && f.isDirectory()) {
答案 2 :(得分:2)
如果文件被隐藏,例如 Documents 中的我的音乐链接(一个Windows生成的快捷方式文件,它不是真正的快捷方式),那么它将测试为isdirectory但它不会像目录一样运行;你无法获得该目录的列表。用户生成的快捷方式将像文件一样。
13年5月31日: 在最近的更新中,'Documents'中的'My Music'链接不再测试为is_hidden。但是,对“我的音乐”文件对象采用的转义符会返回NULL,可以对其进行测试。
答案 3 :(得分:2)
我在OSX上遇到同样的问题。我创建了一个常规文件,isDirectory()
函数返回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"));
答案 4 :(得分:1)
您必须使用try / catch块进行环绕,然后尝试。
答案 5 :(得分:1)
这似乎是由Windows引起的问题。 Linux没有这个问题。