我正在学习如何在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
答案 0 :(得分:0)
ZipFile
仅适用于文件,而ACTION_GET_CONTENT
的结果是Uri,通常无法从中获取文件(请参见How to Consume Content From a Uri详细说明)。
有两种解决方案:
使用ZipInputStream
,它可以提取流的内容。
将流从Uri复制到本地文件,然后使用ZipFile