我正在尝试将文件从内部手机内存移动到SD卡.
val oldFile = File(oldPath) //oldPath is string
val newFile = File(newPath) //newPath is string
if(newFile.exists()) {
newFile.delete()
}
newFile.parentFile.mkdirs()
newFile.createNewFile() //crashes here
// copy file code
Run Code Online (Sandbox Code Playgroud)
路径是绝对的.
旧文件路径是:
/storage/emulated/0/Android/data/com.package/files/2ec37ce3-ca72-4a35-a6e6-2d7f8e864c6c
Run Code Online (Sandbox Code Playgroud)
新文件路径是:
/storage/48EE-C144/chosenDirectory/2ec37ce3-ca72-4a35-a6e6-2d7f8e864c6c
Run Code Online (Sandbox Code Playgroud)
2ec37ce3-ca72-4a35-a6e6-2d7f8e864c6c文件在哪里.
路径是正确的,新的文件路径由用户手动选择,外部目录选择器库工作正常.
当然,app会询问用户的权限,并且在未授予权限之前不会将用户传递给应用程序.
int perm = this.checkSelfPermission(permission.WRITE_EXTERNAL_STORAGE);
int perm2 = this.checkSelfPermission(permission.READ_EXTERNAL_STORAGE);
if (perm != PackageManager.PERMISSION_GRANTED || perm2 != PackageManager.PERMISSION_GRANTED) {
/*ask for permissions and show explain dialog*/
}
Run Code Online (Sandbox Code Playgroud)
清单中的分配也被添加.
newFile.createNewFile()使用异常日志调用时应用程序崩溃:
05-07 13:02:14.995 14004-14004/com.packagename E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.packagename, PID: 14004
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451)
Caused …Run Code Online (Sandbox Code Playgroud)