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

前端之家收集整理的这篇文章主要介绍了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相关文章