调用 deleteOnExit 后未删除临时文件

Temporary file not deleted after calling deleteOnExit

提问人:segoSambel 提问时间:9/15/2023 更新时间:9/15/2023 访问量:32

问:

这是我当前在 Android 上的缓存目录内创建一个临时文件的实现。但是,在我关闭应用程序后,应该删除此文件。然而,这个文件仍然存在于我的缓存目录中。顺便说一句,我的模拟器运行的是 Android 12。

fun uriToFile(context: Context, uri: Uri): File? {
    val contentResolver: ContentResolver = context.contentResolver
    val fileExtension = getFileExtension(context, uri)
    val fileName = "file_${System.currentTimeMillis()}"
    val directory = context.cacheDir
    val destinationFile = File.createTempFile(fileName, ".$fileExtension", directory)
    destinationFile.deleteOnExit()

    try {
        val inputStream: InputStream? = contentResolver.openInputStream(uri)
        if (inputStream!=null) {
            val outputStream = FileOutputStream(destinationFile)
            val buffer = ByteArray(1024)
            var bytesRead: Int
            while (inputStream.read(buffer).also { bytesRead = it }!=-1) {
                outputStream.write(buffer, 0, bytesRead)
            }
            outputStream.close()
            inputStream.close()
            return destinationFile
        }
    } catch (e: IOException) {
        //
    }
    return null
}

private fun getFileExtension(context: Context, uri: Uri): String {
    val contentResolver: ContentResolver = context.contentResolver
    val mimeType = contentResolver.getType(uri)
    return MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType)
        ?: "unknown"
}

我试过四处走动,但没有用。destinationFile.deleteOnExit()

Java Android Kotlin 文件

评论

5赞 CommonsWare 9/15/2023
“此文件应该在我关闭我的应用程序后删除” -- 您对“关闭我的应用程序”的定义是什么? 将在进程结束时生效,该进程由操作系统按照自己的计划处理。deleteOnExit()
0赞 tipa 9/30/2023
android.googlesource.com/platform/libcore.git/+/......“请注意,在 Android 上,应用程序生命周期不包括 VM 终止,因此调用此方法不会确保删除文件”

答: 暂无答案