错误“不能为null”在Kotlin中
有一个.zip文件中有多个文件,我正在尝试获取。 试图解压缩文件提供了一个java.lang.IllegalStateException:zis.nextEntry不能为null。 如何正确地做到这一点?
@Throws(IOException::class) fun unzip(zipFile: File, targetDirectory: File) { val zis = ZipInputStream( BufferedInputStream(FileInputStream(zipFile))) try { var ze: ZipEntry var count: Int val buffer = ByteArray(8192) ze = zis.nextEntry while (ze != null) { val file = File(targetDirectory, ze.name) val dir = if (ze.isDirectory) file else file.parentFile if (!dir.isDirectory && !dir.mkdirs()) throw FileNotFoundException("Failed to ensure directory: " + dir.absolutePath) if (ze.isDirectory) continue val fout = FileOutputStream(file) try { count = zis.read(buffer) while (count != -1) { fout.write(buffer, 0, count) count = zis.read(buffer) } } finally { fout.close() zis.closeEntry() ze = zis.nextEntry } } } finally { zis.closeEntry() zis.close() } }
从文件流中读取的ZipEntry
在到达文件末尾时将为null
,因此您必须将变量存储为空,即:
var ze: ZipEntry?
您可以将您读取的值分配给不可为空的变量,因为他们的平台类型为ZipEntry!
,因为它是一个Java API – 在这种情况下,你必须确定它是否可以为null
。 有关更多信息,请参阅有关平台类型的文档 。
你可以像这样var ze: ZipEntry
定义变量ze
。 所以这个类型是ZipEntry
而不是ZipEntry?
(可空类型)。
如果你通过var ze: ZipEntry?
更改var ze: ZipEntry
var ze: ZipEntry?
,变量可以为null。
您可以检查文档的空安全性 。 这是Kotlin的大事之一。
- 在android studio中使用main函数运行单个kotlin类
- getContentResolver.openInputStream返回一个空的流
- 我怎样才能注入对象到android kotlin MVP mosby应用程序与匕首的主持人
- 错误:com.app.android.dagger.component.AppComponent(unscoped)可能不引用作用域绑定:
- 如何将char转换为kotlin语言的ascii值
- Android Kotlin – 无法调用onNavigationItemSelected方法
- Android Studio执行失败的任务compilefreeDebugKotlin
- Android的工作室2.3总是挂出
- AdMob RewardedVideoAd一直在后台运行