2017-10-10 36 views
2

在.zip文件中有多個文件,我試圖獲取。嘗試解壓縮文件會提供java.lang.IllegalStateException:zis.nextEntry不能爲null。如何以正確的方式做到這一點?錯誤「不能爲null」在Kotlin中

@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() 
     } 
    } 
+0

顯示調用該方法的代碼。 – zulq

回答

1

ZipEntry你從流中讀取會null當到達文件的末尾,所以你必須讓你將其存儲在可空變量:

var ze: ZipEntry? 

你被允許將您讀取的值分配給不可爲空的變量,因爲它們的平臺類型爲ZipEntry!,因爲它是Java API - 在這種情況下,您必須確定它是否可以是null。有關平臺類型的更多信息,請參閱docs

0

您可以像這樣定義變量zevar ze: ZipEntry。所以類型是ZipEntry而不是ZipEntry?(可爲空類型)。

如果您將var ze: ZipEntry更改爲var ze: ZipEntry?,則變量可以爲null。

您可以查看文檔Null Safety。這是Kotlin的一件大事。

相關問題