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里的路径名建立文件夹(当你不知道此文件夹是否存在,也不知道父文件夹存在),就可用此方法,它建立文件夹的原则是:

  • 如果父文件夹不存在并且最后一级子文件夹不存在,它就自动新建所有路径里写的文件夹;
  • 如果父文件夹存在,它就直接在已经存在的父文件夹下新建子文件夹。

Android 创建文件路径这件事,你也可能会犯的错误

上一篇:Mono for Android 篇二 使用Spinner 实现下拉列表读取Browser.BookmarksUri


下一篇:Spring面试题之ApplicationContext和BeanFactory的区别