Androidでassetsにあるzipファイルを展開したいと思っています。zt-zipというライブラリを使いたかったのですが、assets内のファイルを扱う方法がわからなかったため、ZipInputStreamを使うことにしました。調べながら以下のような関数を作りました。
fun zipfile_extract() { try { val input = ZipInputStream(getAssets().open("test.zip")) // ZIPファイルに含まれるエントリに対して順にアクセス while (true) { val zipEntry = input.getNextEntry() ?: break; val newfile = File(zipEntry.getName()) println(newfile) // directoryの場合は、mkdirして次へ if(zipEntry.isDirectory()){ newfile.mkdirs() continue } // ファイル出力する場合、 // フォルダが存在しない場合は事前にフォルダ作成 if( !newfile.getParentFile().exists() ){ newfile.getParentFile().mkdirs(); } // 出力用ファイルストリームの生成 val output = BufferedOutputStream( FileOutputStream(newfile.getName()) ) // エントリの内容を出力 val buffer = ByteArray(1024) while (true) { val len = input.read(buffer) if(len == -1) { break } else { output.write(buffer, 0, len) } } input.closeEntry() output.close() } } catch (e: FileNotFoundException) { e.printStackTrace() } catch (e: IOException) { e.printStackTrace() } }
test.zipにはHTMLファイルが3つ入っているだけなのですがうまく動いてくれず、
println(newfile)
もファイル名を出力してくれない状況です。どこがおかしいかわかりますでしょうか?
回答1件
あなたの回答
tips
プレビュー