2020-05-05

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

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


关于创建文件的路径,你也可能会犯的错误

在特定文件夹内创建一个新文件

  • 当采用 getExternalFilesDir(null)

    就会在路径为 /storage/emulated/0/Android/data/你的具体包名/files会创建出如上的文件夹出来

  • 而采用 Environment.getExternalStoragePublicDirectory("").absolutePath

    会获取到/storage/emulated/0 的路径

如果你想要在 一个已存在的文件夹里面创建一个新的文件夹,再在新的文件夹里创建目标文件File。要记住,你不可以通过拼接出来的总路径直接create一个目标文件出来。这是很简单的原因,因为系统无法根据你的Path帮你的目标File找到对应的目录,如果目标File找不到父文件夹,你又没有创建这个文件夹,那肯定是不行啦,也就无法进行下一步的创建文件。。即是说你需要先创建好目标文件的父文件夹,再create文件

//反例👇,会闪退或者报FileNotFoundExceptionval path = Environment.getExternalStoragePublicDirectory("").absolutePathval file = File("${path}/Download/${url.substringAfterLast("/")}")file.createNewFile()//正确👇val path = MyApp.CONTEXT.getExternalFilesDir(null)?.absolutePathval 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里的路径名建立文件夹(当你不知道此文件夹是否存在,也不知道父文件夹存在),就可用此方法,它建立文件夹的原则是:

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

No comments:

Post a Comment