Pet*_*sis 13 java android inputstream zipinputstream 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()
}
}
Run Code Online (Sandbox Code Playgroud)
在ZipEntry你从流中读取会null当你达到了文件的末尾,所以你必须让你将其存储在可空的变量:
var ze: ZipEntry?
Run Code Online (Sandbox Code Playgroud)
您可以将读取的值分配给不可为空的变量,因为它们具有平台类型ZipEntry!,因为它是Java API - 在这种情况下,您必须确定它是否可以null.有关更多信息,请参阅有关平台类型的文档.
| 归档时间: |
|
| 查看次数: |
11196 次 |
| 最近记录: |