Kotlin解压缩MAC压缩目录

时间:2020-03-04 11:49:20

标签: android macos kotlin

我正在与Kotlin一起尝试解压缩文件,问题是该文件是从Mac压缩的,所以我得到了一些奇怪的东西。 zip文件位于资产文件夹中,这是我访问它的方式:

val destination = applicationContext.getFilesDir().getAbsolutePath()
        println(destination)
        val stream = applicationContext.getAssets().open("MPNC3Dn6UZ8c.zip")
        unzip(stream, destination)

fun unzip(stream: InputStream, destination: String) {
        dirChecker(destination, "")
        val buffer = ByteArray(BUFFER_SIZE)
        try {
            val zis = ZipInputStream(stream)
            var ze: ZipEntry? = null

        while ({ ze = zis.nextEntry; ze }() != null) {
            Log.v("tag", "Unzipping " + ze!!.name)

            if (ze!!.isDirectory) {
                dirChecker(destination, ze!!.name)
            }
            else {
                val f = File(destination, ze!!.name)
                println(ze!!.name)
                if (!f.exists()) {
                    val success = f.createNewFile()
                    if (!success) {
                        Log.w("tag", "Failed to create file " + f.name)
                        continue
                    }
                    val fout = FileOutputStream(f)
                    var count: Int = 0
                    while ({ count = zis.read(buffer); count }() != -1) {
                        fout.write(buffer, 0, count)
                    }
                    zis.closeEntry()
                    fout.close()
                }
            }

        }
        zis.close()
    } catch (e: Exception) {
        Log.e("tag", "unzip", e)
    }
}

private fun dirChecker(destination: String, dir: String) {
    val f = File(destination, dir)

    if (!f.isDirectory) {
        val success = f.mkdirs()
        println(f.name)
        if (!success) {
            Log.w("tag", "Failed to create folder " + f.name)
        }
    }
}

问题是我在此行崩溃:val success = f.createNewFile(),错误是:java.io.IOException:没有这样的文件或目录。我知道这意味着该文件不存在,但是ze !!。name的log.v给了我:解压缩__MACOSX /._ MPNC3Dn6UZ8c。而崩溃前的println(ze !!。name)正好给我:._MPNC3Dn6UZ8c

我认为该错误是由于名称之间的差异所致,但我在文件和__MACOSX /之前执行了._吗?我该如何解决?

编辑

我尝试将这样的名称硬编码为val f = File(destination, "MPNC3Dn6UZ8c"),但没有错误,而且似乎在解压缩所有文件时就解压缩了MPNC3Dn6UZ8c / images / image_0016_0018.jpg,以此类推。文件。

问题是当我想像这样验证它时:

val file = File(filesDir.absolutePath).walk().forEach { println(it) }

要查看这些文件是否仅创建目录,而我没有看到任何文件。那是因为__MACOSX /,也许我不是他们,或者他们可能被藏起来了吗?

我还注意到,当我使用设置->应用程序进入应用程序数据时...我看到数据是80Ko,而我的原始目录是800Ko,所以我认为解压缩没有按预期进行。

0 个答案:

没有答案
相关问题