最近测试把文件写入到系统Download目录时发现直接把文件写入到Download中时没有问题。但是如果在Download中添加了一级目录,比如Download/Test时,第一次安装app,而且download目录下没有Test时,可以正常写入文件。但是卸载重装app或者Download中原来就有Test目录,写入文件时就会出现以下异常
文件写入代码如下:
private fun createFile1(){
val path = "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)}/Test"
val directory = File(path)
if(!directory.exists()){
directory.mkdirs()
}
val file = File(directory,"test.txt")
FileOutputStream(file).use { outputStream->outputStream.write("Hello world!".toByteArray()) }
}
解决方式用三种,第一种是手动删除掉Download中的Test目录,或者创建子目录时确保子目录在Download中不存在,这种解决方法简单粗暴。
第二种就是申请所有文件管理权限。
第三种就是用MediaStore写入文件,代码如下:
MediaStore 写入文件
/**
* 创建文件到download目录
*/
private fun createFile() {
val values = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, "sdf.txt")// 文件名
put(MediaStore.MediaColumns.MIME_TYPE, "text/plain")// 文件类型
put(MediaStore.MediaColumns.RELATIVE_