Note that there are some explanatory texts on larger screens.

plurals
  1. POUzip folders recursively -android
    primarykey
    data
    text
    <p>I have tried to unzip a zipped file (This file contains many sub-folders and files).</p> <pre><code>I am not able to create sub-folders while unzipping the file. </code></pre> <p>Each time I am getting an error saying:</p> <pre><code>No such file or directory. </code></pre> <p>I have searched a lot about this like: </p> <ol> <li><a href="https://stackoverflow.com/questions/5028421/android-unzip-a-folder">Android - Unzip a folder?</a></li> <li><a href="http://www.roseindia.net/tutorial/java/corejava/zip/ZipIsDirectory.html" rel="nofollow noreferrer">http://www.roseindia.net/tutorial/java/corejava/zip/ZipIsDirectory.html</a></li> <li><a href="https://stackoverflow.com/questions/7697466/unzip-a-zipped-file-on-sd-card-in-android-application">Unzip a zipped file on sd card in Android application</a></li> <li><a href="https://stackoverflow.com/questions/981578/how-to-unzip-files-recursively-in-java">How to unzip files recursively in Java?</a></li> </ol> <p>But, nothing helped me.</p> <p>Following is what I have tried:</p> <pre><code>public class UnZipper { private static final String TAG = "UnZip"; private String mFileName, mDestinationPath; public UnZipper(String fileName, String destinationPath) { mFileName = fileName; mDestinationPath = destinationPath; } public String getFileName() { return mFileName; } public String getDestinationPath() { return mDestinationPath; } // shrikant public void unzip() { String fullPath = mFileName; Log.d(TAG, "unzipping " + mFileName + " to " + mDestinationPath); doInBackground(fullPath, mDestinationPath); } // shrikant: I have changed return type from Boolean to boolean. protected boolean doInBackground(String filePath, String destinationPath) { File archive = new File(filePath); boolean returnValue = false; try { ZipFile zipfile = new ZipFile(archive); for (Enumeration e = zipfile.entries(); e.hasMoreElements();) { ZipEntry entry = (ZipEntry) e.nextElement(); try { unzipEntry(zipfile, entry, destinationPath); Log.d("Unzipped", entry.getName()); returnValue = true; } catch (Exception ex) { Log.e(TAG, "Error while extracting file: " + entry + ex.getMessage()); } } } catch (Exception e) { Log.e(TAG, "Error while extracting file " + archive, e); // return false; } return returnValue; } // shrikant: I have changed return type from void to boolean. /** * Unzips the zipped file into outputDir path. * * @param zipfile * @param entry * @param outputDir * @throws IOException */ private void unzipEntry(ZipFile zipfile, ZipEntry entry, String outputDir) throws IOException { Log.d("CURRENT ZIP", entry.getName()); String _dir = null, fileName = null; if (entry.getName().contains("\\")) { _dir = entry.getName().substring(0, entry.getName().indexOf('\\')); createDir(new File(outputDir, _dir)); fileName = entry.getName().substring(entry.getName().indexOf('\\')); } // Change by Prashant : To Remove "/" from file Name Date : 5/01/2011 if (fileName.toString().startsWith("\\")) { fileName = fileName.substring(1); // End } if (_dir != "") outputDir = outputDir + "/" + _dir; File outputFile = new File(outputDir, fileName); if (!outputFile.getParentFile().exists()) { createDir(outputFile.getParentFile()); } Log.d("OUTPUT FILE", outputDir + fileName); Log.v(TAG, "Extracting: " + entry); Log.d("FOUND inside unzipEntry()", entry.getName()); BufferedInputStream inputStream = new BufferedInputStream( zipfile.getInputStream(entry)); // **here I am getting error.** BufferedOutputStream outputStream = new BufferedOutputStream( new FileOutputStream(outputFile)); // **above line.** try { copy(inputStream, outputStream); } finally { outputStream.close(); inputStream.close(); } } private void createDir(File dir) { if (dir.exists()) { return; } Log.v(TAG, "Creating dir " + dir.getName()); if (!dir.mkdirs()) { throw new RuntimeException("Cannot create dir " + dir); } } private void copy(BufferedInputStream input, BufferedOutputStream output) throws IOException { byte[] buffer = new byte[4096]; int size; while ((size = input.read(buffer)) != -1) output.write(buffer, 0, size); } } </code></pre> <p><strong>My question is</strong>: (Please look at the code)</p> <p>When I am calling <code>unzipEntry()</code>, when it encounters a sub-folder, it passes something like "<code>/data/abc.ext</code>", but my file system does not contain any folder named as "<strong>data</strong>", I even tried to create it, but failed in doing so. </p> <blockquote> <p>So how to create sub-folders from zipped file to destination path??</p> </blockquote> <p>I have even tried method:</p> <pre><code>if(entry.isDirectory) { // create directory } </code></pre> <p>But this doesn't get called, since <code>unzipEntry()</code> (Please look in <code>for() loop</code>) directly passes the file under sub-folder.</p> <p>Please help me on this.</p> <p>Thank you.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload