android - 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
解决方案
ZipFile
仅适用于文件,而结果ACTION_GET_CONTENT
是一个 Uri,您通常无法从中获取文件(有关详细说明,请参阅如何使用 Uri中的内容)。
有两种解决方案:
使用 a
ZipInputStream
,它可以提取流的内容。将流从 Uri 复制到本地文件,然后使用
ZipFile
推荐阅读
- python - 如何使用 YouTube Data API v3 从频道中提取超过 20000 个视频的元数据?
- r - r 根据多列删除某些数据帧行
- python - 在 Jupyter 上进行 Pandas 分析时出错
- sql - 关于 SQL 查询中派生列的执行问题
- heroku - 将应用程序上传到heroku reactjs-nodejs后,api调用不起作用
- python - 从 Python Popen().communicate() 获取标准错误
- php - 组合 2 个查询以防止必须在 foreach 循环中插入查询
- python - 编码时输入字母时,spyder ide 会冻结片刻
- flutter - 如何在颤动中从 Firebase 存储中获取下载 URL
- ruby - 脚本“主”第 14 行:发生运行时错误,回溯太大。traceback.log 中的输出 Xenoverse PokeGame 如何修复?