Я работаю с kotlin, пытаясь распаковать файл, проблема в том, что файл был заархивирован из файла c, поэтому я получаю некоторые странные вещи. 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)
}
}
}
Проблема в том, что я получил cra * sh в этой строке: val success = f.createNewFile()
, и ошибка: java .io.IOException: Нет такого файла или каталога. я знаю, что это означает, что файл не существует, но log.v от имени !! !!. дают мне: Разархивирование __MACOSX /._ MPNC3Dn6UZ8 c. Принимая во внимание, что println (ze !!. Name) оправдывает перед тем, как cra sh даст мне: ._MPNC3Dn6UZ8 c
Я предполагаю, что ошибка возникла из-за этих различий между именами, но мои do ._ перед моим файлом и __MACOSX /? Как я могу это исправить?
РЕДАКТИРОВАТЬ
Я попытался жестко запрограммировать имя как это: val f = File(destination, "MPNC3Dn6UZ8c")
с этим я не получаю ошибку, и, кажется, распаковать все файлы, которые я получаю: распаковка MPNC3Dn6UZ8c / images / image_0016_0018.jpg и так далее для всех моих файлов.
Проблема в том, когда я хочу проверить это следующим образом:
val file = File(filesDir.absolutePath).walk().forEach {
println(it)
}
Чтобы увидеть, были ли созданы эти файлы, только каталог, и я не вижу никаких файлов. Так это из-за __MACOSX / и, может быть, я их не знаю, или они могут быть скрыты или что-то?
Я также заметил, что когда я go в данных приложения, используя настройки-> Приложение ... я видно, что данные имеют размер 80Ко, где мой исходный каталог - 800Ко, поэтому я думаю, что распаковка не сработала так, как ожидалось.