ZipFile Kotlin类返回java.io.FileNotFoundException:文件不存在

时间:2019-07-09 14:01:10

标签: android kotlin

我正在学习如何在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

1 个答案:

答案 0 :(得分:0)

ZipFile仅适用于文件,而ACTION_GET_CONTENT的结果是Uri,通常无法从中获取文件(请参见How to Consume Content From a Uri详细说明)。

有两种解决方案:

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

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

  • 打开