如何将文件写入外部存储(SD卡)

时间:2014-01-13 15:44:05

标签: android

我知道这可能已被多次回答并且我已经搜索过,但我无法解决我的问题。每次我尝试写入SD卡时,它似乎都会进入内部存储。我的代码行只是

File root = android.os.Environment.getExternalStorageDirectory(); 
File dir = new File (root.getAbsolutePath() +"/mydir");
dir.mkdirs();

当我转到“我的文件”时,该目录始终显示在/ storage / emulated / 0中,而不是显示在SD卡上。我拥有清单中设置的所有权限。我有什么简单的东西吗?

P.S。我的设备是Note 3.我可以手动将文件复制到SD卡。

4 个答案:

答案 0 :(得分:6)

  

如何将文件写入外部存储(SD卡)

在大多数Android设备上,外部存储不是“sdcard”。

  

当我转到我的文件时,目录始终显示在/ storage / emulated / 0而不是sdcard

这是因为/storage/emulated/0是外部存储。

引用the documentation

  

每个Android兼容设备都支持可用于保存文件的共享“外部存储”。这可以是可移动存储介质(例如SD卡)或内部(不可移动)存储。

Android SDK几乎不支持其他存储位置,例如SD卡。 Android 4.4有一点,如同一文档页面所述:

  

有时,已分配内部存储器分区以用作外部存储器的设备也可能提供SD卡插槽。当这样的设备运行Android 4.3及更低版本时,getExternalFilesDir()方法仅提供对内部分区的访问,并且您的应用程序无法读取或写入SD卡。但是,从Android 4.4开始,您可以通过调用getExternalFilesDirs()来访问这两个位置,它返回一个包含每个位置条目的File数组。阵列中的第一个条目被视为主要外部存储,您应该使用该位置,除非它已满或不可用。如果您想同时访问两个可能的位置,同时也支持Android 4.3及更低版本,请使用支持库的静态方法ContextCompat.getExternalFilesDirs()。这也会返回一个File数组,但在Android 4.3及更低版本中只包含一个条目。

答案 1 :(得分:0)

在这里,我发布了用于查找sdcard路径的代码(在问题的正文中)

How can I properly obtain the external SD card path?

它应该可以解决你的问题。 “外部”存储并不总是您的SD卡,因为许多Android设备将内部存储器视为外部分区。真实外部存储(您的SD卡)的路径由设备的构造函数设置,并且没有用于获取它的标准API。

答案 2 :(得分:0)

打印

dir.toString()

以上,看看你得到了什么。然后将其与

进行比较
File dir = new File(getExternalFilesDir(null) +  File.separator + "mydir");

如果你喜欢第二种选择,你应该得到(我做了)/storage/sdcard0/data/your.package.name/files/mydir,你上面的目录是mydir,而不是My Files?

答案 3 :(得分:-1)

您需要手动查找外置SD卡,具体取决于手机。

请参阅此tutorial,其中有一个示例,说明如何测试SD卡的不同路径。