【发布时间】:2026-02-12 20:55:01
【问题描述】:
在我的 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 清单文件的清单标记下有 WRITE_STORAGE_PERMISSION。我可以在 sdcard 上创建其他文件夹和文件而不会出现问题。 该应用可在以下手机上正常运行:
- Nexus S(root)运行 Gingerbread (2.3)
- Nexus S(无根)运行 Jelly Bean (4.1.2)
- HTC Desire (root) 运行 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字节的文件。
- 0 字节文件无法在 Astro 中删除。但是,当我重新启动手机时,该文件夹神奇地存在并且正常。
- 我使用 FileInstall 来监视 OSGiComponents/install 文件夹。当我将捆绑 jar 放入该文件夹时,除了 Galaxy Nexus (当应用程序第一次运行时)之外,所有手机都可以检测到并安装它。 FileInstall 没有关于无法查看目录的日志/错误。
- 我已经在 2 部 Galaxy Nexus 手机上测试过,同样的问题。
我怀疑这是一个权限问题,但我不确定它是什么,以及为什么在 exists() 返回 false 时会创建一个 0 字节文件。我没有在代码中的其他任何地方创建此文件。
关于可能是什么问题的任何建议?
谢谢:)
更新:我想我已经确定了问题,请查看我发布的答案。
【问题讨论】:
-
public static String FOLDER = Environment.getExternalStorageDirectory().getPath()+"/folder/";文件屏幕路径 = 新文件(文件夹);屏幕路径.mkdirs();这可能有效。
-
谢谢,但不幸的是仍然出现同样的问题:(我想我已经确定了这个问题,我在下面发布了一个答案。
标签: android apache-felix mkdirs