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

标签 android apache-felix mkdirs

在我的 android 应用程序中,我试图在 sdcard 上创建以下文件夹:

/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 list 文件的 list 标签下有 WRITE_STORAGE_PERMISSION。我可以在 SD 卡上毫无问题地创建其他文件夹和文件。 该应用程序在以下手机上运行良好:

  1. 运行 Gingerbread (2.3) 的 Nexus S(root)
  2. 运行 Jelly Bean (4.1.2) 的 Nexus S(无根)
  3. 运行 Froyo (2.2) 的 HTC Desire(root)
  4. 运行 Froyo (2.2) 的 HTC Desire(无根)

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

Astro showing a zero byte felix-cache file

  1. 从文件夹名称可以看出,我使用的是 Apache Felix。如果缓存目录不存在,Felix 会自动创建它。在 Galaxy Nexus 上,它总是提示无法创建缓存目录。 Astro 显示一个 0 字节文件而不是文件夹。这就是为什么我决定在初始化 Felix 之前尝试自己创建缓存文件夹。
  2. 因此,我自己创建了缓存文件夹。该应用程序第一次运行良好,我可以在 Astro 中看到该文件夹​​。如果我关闭应用程序,然后删除 Astro 中的文件夹,然后重新启动应用程序,即使我的代码神秘地无法创建缓存目录,并且 Astro 显示一个 0 字节文件。
  3. 不能在 Astro 中删除 0 字节文件。但是,当我重新启动手机时,该文件夹神奇地存在并且正常。
  4. 我使用 FileInstall 查看 OSGiComponents/install 文件夹。当我将 bundle jars 放入该文件夹时,它会在所有手机上检测到并安装正常,除了 Galaxy Nexus(当应用程序第一次运行时)。 FileInstall 没有关于无法查看目录的日志/错误。
  5. 我已经在 2 部 Galaxy Nexus 手机上测试过,同样的问题。

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

对可能出现的问题有什么建议吗?

谢谢:)

更新:我想我已经确定了问题所在,请查看我发布的答案。

最佳答案

请使用代替

   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 mkdirs() 创建一个零字节文件而不是文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13948890/

相关文章:

java - Osgi getService()

java - 从 Felix 内部嵌入 Java DB?

android mkdirs 不工作

java - Android MKDirs() 不适合我 - 不是外部存储

android - 如何从客户端应用程序中隐藏我的 Android 库依赖项?

android - UnsatisfiedLinkError: 未找到 byte[] dji.midware.natives.SDKRelativeJNI.native_getXXX (...) 的实现

android - picasso :将图像加载到小部件 ListView

c# - 我是否需要取消订阅 Click 事件以防止内存泄漏?

java - OSGi 应用程序内部的 REST 客户端

Java,如何在远程主机中创建新目录。