标签:except file emulated contex load 闪退 拼接 substring 路径
当采用 getExternalFilesDir(null)
,
就会在路径为 /storage/emulated/0/Android/data/你的具体包名/files
会创建出如上的文件夹出来
而采用 Environment.getExternalStoragePublicDirectory("").absolutePath
会获取到/storage/emulated/0
的路径
如果你想要在 一个已存在的文件夹里面创建一个新的文件夹,再在新的文件夹里创建目标文件File。要记住,你不可以通过拼接出来的总路径直接create一个目标文件出来。这是很简单的原因,因为系统无法根据你的Path帮你的目标File找到对应的目录,如果目标File找不到父文件夹,你又没有创建这个文件夹,那肯定是不行啦,也就无法进行下一步的创建文件。。即是说你需要先创建好目标文件的父文件夹,再create文件!
//反例??,会闪退或者报FileNotFoundException
val path = Environment.getExternalStoragePublicDirectory("").absolutePath
val file = File("${path}/Download/${url.substringAfterLast("/")}")
file.createNewFile()
//正确??
val path = MyApp.CONTEXT.getExternalFilesDir(null)?.absolutePath
val file1 = File("${path}/Download")
file1.mkdirs()
val file = File("${path}/${url.substringAfterLast("/")}")
file.createNewFile()
如果你想在已经存在的文件夹(/storage/emulated/0/Android/data/)下建立新的文件夹(XXXXXX文件夹),就可以用此方法。此方法不能在不存在的文件夹下建立新的文件夹。假如想建立名字是"XXXXXX"文件夹,那么它的父文件夹必须存在。
如果你想根据File里的路径名建立文件夹(当你不知道此文件夹是否存在,也不知道父文件夹存在),就可用此方法,它建立文件夹的原则是:
标签:except file emulated contex load 闪退 拼接 substring 路径
原文地址:https://www.cnblogs.com/DMingO/p/12828995.html