写入SD卡Android

问题描述:

我想给我的应用程序的用户选择保存到内部手机存储器或SD卡。如果我创建了用户的选择一个File的URI(不带文件名)是一样的东西:写入SD卡Android

内部:内容:/com.android.externalstorage.documents/tree/primary%3A

SD:内容:/com.android.externalstorage.documents/tree/760E-F734%3A

但是,如果我尝试使用下面的代码写一个文件到这些目录我的错误java.io.IOException: No such file or directory

File writePath = new File("content:/com.android.externalstorage.documents/tree/primary%3A") 

File file = new File(writePath, fileName); 

try { 
    file.createNewFile(); 
} catch (IOException e) { 
    Log.e("saveSurvey", "Failed to create file!" + e.getMessage()); 
    return false; 
} 

因此该文件将被写入某处像这样:

内容:/com.android.externalstorage.documents/tree/primary%3A/ [我的文件名]

我已经宣布在清单中WRITE_EXTERNAL_STORAGE权限,所以我想这是不是一个权限问题,但更多的是无效路径问题。

如果这些文件路径无效,我该如何去写入SD卡?使用Environment.getExternalStorageDirectory()总是写入我的设备的内部存储器('/ storage/emulated/0')。

+0

创建文件时,你混合两个概念,你发送'content' URI而它需要一个'file' URI,更多信息在https://developer.android.com/reference/java/io/File.html从'Environment.getExternalStorageDirectory()'返回的路径是正确的,AVD通常模拟一个外部存储在这个路径中,不要将SD卡与外部存储混淆,它可以是不同的来源,更多信息请参阅https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory() –

+0

@AlbertoMéndez感谢您的信息。我知道“外部”存储可能是SD卡或可安装的设备内存,但是如何写入SD卡而不是设备内存? – petehallw

请检查您的文件路径。 呼叫一个getAbsolutePath()函数,并检查writePath

File writePath = new File("content:/com.android.externalstorage.documents/tree/primary%3A") 
if(writePath.exists() && writePath.isDirectory()) { 
    //File extensions can be declared 
     File file = new File(writePath.getAbsolutePath(), fileName+ extensions); 
} 
+0

这是我今天看到的最大的废话。 – greenapps

+0

@greenapps是什么意思? – redAllocator

+0

你赢了价格;-)。 – greenapps

因为路径是不同的设备不同,您收到此错误。

尝试使用Environment.getExternalStorageDirectory()writePath

请记住在android系统6及以上的,你必须在运行时请求权限

+0

但正如我在我的文章中提到的,这总是写入设备的内部存储而不是SD卡。 – petehallw