Android mkdirs()创建一个零字节文件而不是文件夹

在我的 Android应用程序中,我试图在SD卡上创建以下文件夹:
/mnt/sdcard/OsgiComponents/admin/Felix-cache/

这是代码

File cacheDir = 
    new File( Environment.getExternalStorageDirectory().getAbsolutePath() + 
              "/OsgiComponents/admin/Felix-cache/" );
// Create the folder
cacheDir.mkdirs();
// Check if it exists
if ( ! cacheDir.exists() ) {
    Log.e ( "Debug","Cache directory cannot be created" );
}

我在android清单文件的清单标签下有WRITE_STORAGE_PERMISSION.我能够在SD卡上创建其他文件夹和文件而没有问题.
该应用程序适用于以下手机:

> Nexus S(扎根)运行姜饼(2.3)
>运行Jelly Bean的Nexus S(无根)(4.1​​.2)
> HTC Desire(rooted)运行Froyo(2.2)
> HTC Desire(无根)运行Froyo(2.2)

但是在运行Ice Cream Sandwich(4.0.4)的三星galaxy Nexus手机(无根)上,该目录被创建为零大小的文件,可以在Astro中看到. exists()调用返回false.

>正如您从文件名称中看到的,我正在使用Apache Felix.如果不存在,Felix自动创建缓存目录.在galaxy Nexus上,它总是抱怨它无法创建缓存目录. Astro显示0字节文件而不是文件夹.这就是我决定在初始化Felix之前尝试自己创建缓存文件夹的原因.
>所以,我自己创建了缓存文件夹.该应用程序第一次正常工作,我可以在Astro中看到该文件夹​​正常.如果我关闭应用程序,然后删除Astro中的文件夹,然后重新启动应用程序,甚至我的代码神秘地无法创建缓存目录,Astro显示0字节文件.
>在Astro中无法删除0字节文件.但是,当我重新启动手机时,文件夹神奇地存在并且没问题.
>我使用FileInstall来观看OsgiComponents / install文件夹.当我将捆绑罐放入该文件夹时,它会在除galaxy Nexus之外的所有手机上检测并安装好(当应用程序第一次运行时). FileInstall没有关于无法查看目录的日志/错误.
>我已经在2台galaxy Nexus手机上测试了这个,同样的问题.

我怀疑这是一个权限问题,但我不确定它是什么,以及为什么创建一个0字节文件而exists()返回false.代码中没有其他地方我创建此文件.

关于可能出现什么问题的任何建议?

谢谢 :)

更新:我想我已经确定了这个问题,请看我发布的答案.

解决方法

请用而不是
File cacheDir = new File( Environment.getExternalStorageDirectory().getAbsolutePath() + 
          "/OsgiComponents/admin/Felix-cache/" );
      cacheDir.mkdirs();

File cacheDir = 
new File( Environment.getExternalStorageDirectory().getAbsolutePath() + 
          "/OsgiComponents/admin/Felix-cache" );
     cacheDir.mkdir();

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...