在特定文件夹内创建一个新文件
-
当采用
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()
补充:创建文件夹函数 mkdir() 与 mkdirs()
mkdir() 必须父文件夹存在
如果你想在已经存在的文件夹(/storage/emulated/0/Android/data/)下建立新的文件夹(XXXXXX文件夹),就可以用此方法。此方法不能在不存在的文件夹下建立新的文件夹。假如想建立名字是"XXXXXX"文件夹,那么它的父文件夹必须存在。
mkdirs() 会判断新建指定路径中缺少的文件夹
如果你想根据File里的路径名建立文件夹(当你不知道此文件夹是否存在,也不知道父文件夹存在),就可用此方法,它建立文件夹的原则是:
- 如果父文件夹不存在并且最后一级子文件夹不存在,它就自动新建所有路径里写的文件夹;
- 如果父文件夹存在,它就直接在已经存在的父文件夹下新建子文件夹。