在特定文件夾內創建一個新文件
-
當采用
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里的路徑名建立文件夾(當你不知道此文件夾是否存在,也不知道父文件夾存在),就可用此方法,它建立文件夾的原則是:
- 如果父文件夾不存在並且最后一級子文件夾不存在,它就自動新建所有路徑里寫的文件夾;
- 如果父文件夾存在,它就直接在已經存在的父文件夾下新建子文件夾。