错误“不能为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
,因此您必须将variables存储为空,即:
var ze: ZipEntry?
您可以将您读取的值分配给不可为空的variables,因为他们的平台types为ZipEntry!
,因为它是一个Java API – 在这种情况下,你必须确定它是否可以为null
。 有关更多信息,请参阅有关平台types的文档 。
你可以像这样var ze: ZipEntry
定义variablesze
。 所以这个types是ZipEntry
而不是ZipEntry?
(可空types)。
如果你通过var ze: ZipEntry?
更改var ze: ZipEntry
var ze: ZipEntry?
,variables可以为null。
您可以检查文档的空安全性 。 这是Kotlin的大事之一。