Java tutorial
//package com.java2s; /* * Copyright (C) 2017 Florian Dreier * * This file is part of MyTargets. * * MyTargets is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. * * MyTargets is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ import android.content.Context; import android.support.annotation.Nullable; import java.io.Closeable; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class Main { private static File unzip(Context context, InputStream in) throws IOException { File tmpDb = null; int dbFiles = 0; try { tmpDb = File.createTempFile("import", ".db"); ZipInputStream zin = new ZipInputStream(in); ZipEntry sourceEntry; while (true) { sourceEntry = zin.getNextEntry(); if (sourceEntry == null) { break; } if (sourceEntry.isDirectory()) { zin.closeEntry(); continue; } FileOutputStream fOut; if (sourceEntry.getName().endsWith(".db")) { // Write database to tmp file fOut = new FileOutputStream(tmpDb); dbFiles++; } else { // Write all other files(images) to files dir in apps data int start = sourceEntry.getName().lastIndexOf("/") + 1; String name = sourceEntry.getName().substring(start); fOut = context.openFileOutput(name, Context.MODE_PRIVATE); } final OutputStream targetStream = fOut; try { int read; while (true) { byte[] buffer = new byte[1024]; read = zin.read(buffer); if (read == -1) { break; } targetStream.write(buffer, 0, read); } targetStream.flush(); } finally { safeCloseClosable(targetStream); } zin.closeEntry(); } } finally { safeCloseClosable(in); } if (dbFiles != 1) { throw new IllegalStateException("Input file is not a valid backup"); } return tmpDb; } private static void safeCloseClosable(@Nullable Closeable closeable) { try { if (closeable != null) { closeable.close(); } } catch (IOException e) { e.printStackTrace(); } } }