2017-10-10 3 views
2

Es gibt mehrere Dateien in einer ZIP-Datei, die ich versuche zu bekommen. Der Versuch, die Dateien zu entpacken, stellt eine java.lang.IllegalStateException bereit: zis.nextEntry darf nicht null sein. Wie man es richtig macht?Fehler "muss nicht null sein" in 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

Zeigen Sie den Code, wo Sie die Methode aufrufen. – zulq

Antwort

1

Die ZipEntry Sie aus dem Stream lesen null sein wird, wenn Sie das Ende der Datei erreichen, so müssen Sie die Variable, die Sie es in nullable speichern:

var ze: ZipEntry? 

Sie durften um die gelesenen Werte einer nicht nullbaren Variablen zuzuweisen, da sie den Plattformtyp ZipEntry! hatten, da es sich um eine Java API handelt - in diesem Fall müssen Sie bestimmen, ob es sich um null handeln kann. Weitere Informationen zu Plattformtypen finden Sie unter docs.

0

Sie definieren die Variable ze wie diese var ze: ZipEntry. So ist der Typ ZipEntry und nicht ZipEntry? (NULL-fähiger Typ). Wenn Sie var ze: ZipEntry durch var ze: ZipEntry? ändern, kann die Variable null sein.

Sie können das Dokument für Null Safety überprüfen. Es ist eines der großen Dinge mit Kotlin.

Verwandte Themen