15

我对一个奇怪的问题很生气。如果我在我的代码中创建一个文件夹

directory_path = Environment.getExternalStorageDirectory()
                + "/" + context.getResources().getString(R.string.app_name);

directory = new File(directory_path);
if (!directory.exists()) {
    directory.mkdirs();
}

在 /sdcard/ 中创建了一个新文件夹。如果我尝试在 logcat directory_path 变量上打印,则路径不同: /storage/emulated/0/ 如果我转到该路径,我会找到另一个与 /sdcard/ 上创建的文件夹同名的文件夹。这对我来说是个问题,因为当我尝试将一些数据写入该文件夹时,所有内容都进入 /storage/emulated/0 上的一个,而另一个(即我想要使用的文件夹)保持为空。为什么?

4

2 回答 2

4

你试过读回数据吗?/storage/emulated/0/ 是 JB 中引入的新路径,用于支持平板电脑上的多个用户。但只要您使用Environment.getExternalStorageDirectory()它访问外部文件,它们的实际驻留位置并不重要。

这里有一些额外的信息:https ://android.stackexchange.com/questions/35541/why-did-sdcard-turn-into-sdcard-0-with-4-2

于 2013-11-16T11:07:03.913 回答
1

/storage/emulated/0/:据我所知,这是指“模拟 MMC”(“所有者部分”)。通常这是内部的。这里的“0”代表用户,“0”是第一个用户,也就是设备所有者。如果您创建更多用户,则此数字将针对每个用户递增。

/storage/emulated/legacy/ 和以前一样,但指向当前工作用户的一部分(对于所有者,这将是一个符号链接

/存储/模拟/0/)。因此,这条路径应该将每个用户带到他的“部分”。

/sdcard/:根据 Shywim 的评论,这是指向...的符号链接

/mnt/sdcard (Android < 4.0)

/storage/sdcard0 (Android 4.0+)

有关更多详细信息,您可以访问stackexchange

于 2018-02-09T10:08:52.483 回答