package com.andexp.skinmixer.zipextractor;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import android.util.Log;
public class ZipExtractor {
String mOutputDirectory;
public ZipExtractor(String outputDirectory) {
mOutputDirectory = outputDirectory;
createDestinationPath();
}
public boolean createDestinationPath() {
return new File(mOutputDirectory).mkdirs();
}
public void extractZipFile(InputStream inputStream)
{
try
{
ZipInputStream zipinputstream = new ZipInputStream(inputStream);
ZipEntry zipentry = zipinputstream.getNextEntry();
while (zipentry != null)
zipentry = extractZipEntry(mOutputDirectory, zipinputstream, zipentry);
zipinputstream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
private ZipEntry extractZipEntry(String destinationname, ZipInputStream zipinputstream, ZipEntry zipentry)
throws FileNotFoundException, IOException {
String entryName = zipentry.getName();
Log.d("Test Zip", "zipentry name : "+entryName);
if(!zipentry.isDirectory()){
System.out.println("entryname "+entryName);
File newFile = new File(entryName);
String directory = newFile.getParent();
if(directory == null)
{
if(newFile.isDirectory())
return null;
}
copyStreamToFile(destinationname, zipinputstream, entryName);
} else {
boolean worked = new File(destinationname+entryName).mkdirs();
Log.d("Test Zip", "Create dir : "+destinationname+entryName+" Creation Worked?"+worked);
}
zipinputstream.closeEntry();
zipentry = zipinputstream.getNextEntry();
return zipentry;
}
private void copyStreamToFile(String destinationname, ZipInputStream zipinputstream, String entryName)
throws FileNotFoundException, IOException {
byte[] buf = new byte[1024];
int n;
FileOutputStream fileoutputstream = new FileOutputStream(destinationname+entryName);
while ((n = zipinputstream.read(buf, 0, 1024)) > -1)
fileoutputstream.write(buf, 0, n);
fileoutputstream.close();
}
}