首页 > 解决方案 > ZipFile Kotlin 类返回 java.io.FileNotFoundException: 文件不存在

问题描述

我正在学习如何在 Kotlin 中使用 zip 文件。理论上,我的应用程序应该从 zip 中读取文件并在需要时提取它们。对于这个任务,我使用 java.util.zip.ZipFile,但是当我传递我选择的文件时,应用程序崩溃,说文件不存在。

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val intent = Intent()
            .setType("*/*")
            .setAction(Intent.ACTION_GET_CONTENT)

        startActivityForResult(Intent.createChooser(intent, "Select a file"), 111)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode == 111 && resultCode == RESULT_OK) {
            val selectedFile = data?.data

            var file = File(selectedFile!!.path)
            var zipFile = ZipFile(file)
        }
    }

java.io.FileNotFoundException:文件不存在:/document/acc=1;doc=155

标签: androidkotlin

解决方案


ZipFile仅适用于文件,而结果ACTION_GET_CONTENT是一个 Uri,您通常无法从中获取文件(有关详细说明,请参阅如何使用 Uri中的内容)。

有两种解决方案:

  • 使用 a ZipInputStream,它可以提取流的内容。

  • 将流从 Uri 复制到本地文件,然后使用ZipFile


推荐阅读