从getExternalCacheDir()获得的/ storage / emulated / 0生成"没有这样的文件或目录"错误

时间:2014-10-27 21:33:40

标签: android storage android-sdcard

在Nexus 4上运行,当我拨打getExternalCacheDir().getAbsolutePath()时,我得到路径为/storage/emulated/0/Android/Data/com.example.myapp/cache。问题在于,如同在不同的地方所述,/storage/emulated/0生成一个"没有这样的文件或目录"错误。

我希望获得的内容类似/storage/emulated/legacy,因为我正确地使用EXTERNAL_STORAGE等命令查询System.getenv("EXTERNAL_STORAGE")环境变量。

我将使用if语句检查并更正路径,以防它指向与getenv不同的东西,但我想了解为什么getExternalCacheDir()返回无效路径,或者如果该功能以某种方式被弃用。

附加说明: 在Xperia U上运行CM11工作正常; 使用adb定位Nexus 4

ls /storage/emulated/0
/storage/emulated/0: No such file or directory

我有正确的访问权限,因为如果我打电话,例如echo "hi!" >> /storage/emulated/legacy/Android/Data/com.example.myapp/cache我没有线索,而调用echo "hi!" >> /storage/emulated/0/Android/Data/com.example.myapp/cache会导致错误。后者是我从getExternalCacheDir获得的。


我有兴趣在shell命令中使用该路径,而不仅仅是使用Android API函数。

1 个答案:

答案 0 :(得分:0)

getExternalCacheDir为您提供有效路径。
如果正确安装了外部存储并且您具有适当的访问权限,则可以对其进行读/写。

那是:

if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) // mounted
    && context.checkCallingOrSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") == PackageManager.PERMISSION_GRANTED) { // have permissions

    File myTempDir = new File(getExternalCacheDir(), "tempDir");
    myTempDir.mkdirs();

    // create and write to files
}

希望有所帮助。