Foldery Uzip rekurencyjnie -android

Próbowałem rozpakować spakowany plik (ten plik zawiera wiele podfolderów i plików).

I am not able to create sub-folders while unzipping the file.

Za każdym razem pojawia się błąd mówiący:

No such file or directory.

Szukałem dużo na ten temat:

Android - rozpakuj folder?http://www.roseindia.net/tutorial/java/corejava/zip/ZipIsDirectory.htmlRozpakuj spakowany plik na karcie SD w aplikacji AndroidJak rozpakować pliki rekurencyjnie w Javie?

Ale nic mi nie pomogło.

Oto, co próbowałem:

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);
    }

}

Moje pytanie brzmi: (Proszę spojrzeć na kod)

Kiedy dzwonięunzipEntry(), gdy napotka podfolder, przechodzi coś w rodzaju „/data/abc.ext„, ale mój system plików nie zawiera żadnego folderu o nazwie„dane„Próbowałem nawet go utworzyć, ale nie udało mi się tego zrobić.

Jak więc utworzyć podfoldery ze spakowanego pliku do ścieżki docelowej?

Próbowałem nawet metody:

if(entry.isDirectory) {
// create directory
}

Ale to się nie nazywaunzipEntry() (Proszę zajrzećfor() loop) bezpośrednio przekazuje plik w podfolderze.

Proszę, pomóż mi z tym.

Dziękuję Ci.

questionAnswers(1)

yourAnswerToTheQuestion