java - Kotlin 中的错误 "must not be null"

标签 java android kotlin inputstream zipinputstream

.zip 文件中有多个文件,我正在尝试获取这些文件。尝试解压缩文件会提供 java.lang.IllegalStateException: zis.nextEntry must not be 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。见 docs有关平台类型的更多信息。

关于java - Kotlin 中的错误 "must not be null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46661956/

相关文章:

src/main/resources 中文件的 Java 路径

java - Java中的线程管理

mvvm - Kotlin 扩展函数数据绑定(bind)

Kotlin 主构造函数调用辅助构造函数

android-studio - Android Studio/IntelliJ 中的 `^let` 注释是什么?

java - 如何查看jar文件中的源代码?

java - 如何对齐 JTextPane 中选定的文本?

java - 多键多值映射可能吗?

java - Gradle Build-Android Gradle 3.2 中的数据绑定(bind)错误

android - 倒计时 MVVMCross 与 Xamarin Android