mkdirs创建文件而不是创建文件夹[JAVA]

问题描述:

解压缩文件时出现问题,我得到“打开失败:ENOTDIR(不是目录)”错误。调试后,我发现问题出在这个功能:
后,我确定当前的ZipEntry是一个目录,我调用这个函数与它的路径:mkdirs创建文件而不是创建文件夹[JAVA]

private void dirChecker(String dir) { 
     File FiledirChecker = new File(PATH + dir); // PATH+dir = /mnt/sdcard/Pictures/Hafs 

     if (!FiledirChecker.isDirectory()) 
      FiledirChecker.mkdirs(); 
    } 

该功能后已经结束了,我浏览到的图片目录,哈夫斯心不是一个目录,而不是它是一个名为“Hafs”的0字节文件。

这是怎么发生的?

我应该指出,对于其他目录(除了“Hafs”),mkdirs通常会创建文件夹!但只适用于这个目录(Hafs)mkdirs不会创建一个目录而是一个文件!

+0

你检查了[这篇文章](http://*.com/questions/4543559/file-mkdirs-method-not-working-in-android-java)? – assylias 2012-08-15 11:45:20

+0

@assylias是的,我已经有了这个许可。 – Omar 2012-08-15 11:47:30

+0

在调试器下运行,或添加打印语句,并查明您是否确信File(“Hafs”)。mkdirs()实际上正在调用(可能不是)。同样,将检查添加到文件解压缩部分该代码确保它不会被意外解压缩为一个文件(它可能是)。 – 2012-08-15 11:52:56

这是因为在代码中的其他地方,已经创建了一个空文件。

或者当您的代码无法创建目录时,该文件是最后一次运行时剩下的文件。

除非我想念你的文件已经在其他地方创建了。
据我可以在你的代码
1看)你检查文件是不是一个目录
2)如果1)是真的,你尝试创建完整的目录结构,并具有相同的名称为文件目录可能已经存在。

+0

这是一个标准成语。一个'File'对象代表一条可能不存在的路径。如果它不是一个目录,那就创建它。确实如果文件存在但不是目录,那么这将尝试(并且失败)来创建目录。 – 2012-08-15 12:03:21

+0

但是,正确的方法是检查'File.exists()',而不是'File.isDirectory()' – 2012-08-15 12:17:34