Android 創建文件路徑這件事,你也可能會犯的錯誤


在特定文件夾內創建一個新文件

  • 當采用 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里的路徑名建立文件夾(當你不知道此文件夾是否存在,也不知道父文件夾存在),就可用此方法,它建立文件夾的原則是:

  • 如果父文件夾不存在並且最后一級子文件夾不存在,它就自動新建所有路徑里寫的文件夾;
  • 如果父文件夾存在,它就直接在已經存在的父文件夾下新建子文件夾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM