Autore Topic: Unzippare file.....bug di android?  (Letto 850 volte)

Offline sgotenks

  • Utente junior
  • **
  • Post: 57
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Geeksphone zero
  • Sistema operativo:
    Windows
Unzippare file.....bug di android?
« il: 19 Luglio 2011, 19:52:42 CEST »
0
Sto provando a unizppare un file. In pratica scarico un file .zip da internet, lo salvo sulla sd card e dopo di che dovrei unzipparlo. Ho provato 20000 codici trovati in internet ma non ne funziona nessuno...........o x lo meno mi da uno strano bug x le cartelle annidate.

Posto il codice che sto usando al momento ma il problema è lo stesso anche con altre mille funzioni.
Il problema si verifica quando ho uno zip che contiene altre cartelle.

Es mioFile.zip
     con all'inetrno x esempio una serie di file + un cartella (esempio nestedFolder)
             che a sua volta contiene altri file.

Il codice qua sotto in teoria dovrebbe percorrere ogni cartella ricorsivamente, e riconoscere se sta trattando un file o una cartella. Se è un file lo copia, se è una cartella la crea e guarda al suo interno se ci son altri file.

Il problema è che non riconosce le cartelle o meglio nn le tratta come tali.

Esempio di zip
   MyZip
           File1
           File2
           cartella1
                       File3
                       File4

In pratica quando arriva qua 
 while((entry = zipFile.getNextEntry()) != null) {
                    String entryName = entry.getName();

in entry dovrebbe finirci la cartella, ovvero se stampo entryName dovrebbe stampare Cartella1.........invece lui unisce la cartella col primo file che c'è al suo interno e lo vede come un file............quindi non crea la cartella e da errore

07-19 17:46:14.256: WARN/System.err(295): java.io.FileNotFoundException: /mnt/sdcard/Download/MyMarketApp/myFile/cartella1/file3.gif (No such file or directory)

nel codice ho messo anche una stampa x vedere se quando becca la cartella la riconosce ma invece

di
trovato cartella = cartella1
trovato file =  file3.gif

scrive:
trovato file = cartella1/file3.gif

e vede la cartella e il file al suo interno come una cosa sola...........non capisco se è un problema di android e del suo tipo di storage o cosa........io sto usando la 2.2......................qualcuno mi sa aiutare?


Codice (Java): [Seleziona]
public static boolean decomprimi(File src, File dirOut) {
        boolean success = false;
        ZipInputStream zipFile = null;
        BufferedOutputStream bos = null;

        try {

            boolean prosegui = true;
            if ( !dirOut.exists() ) {
                if ( !dirOut.mkdirs() ) {
                    System.err.println("Impossibile creare la directory di destinazione.");
                    prosegui = false;
                }
            }

            if ( prosegui ) {
                zipFile = new ZipInputStream( new FileInputStream(src) );

                ZipEntry entry = null;
                while((entry = zipFile.getNextEntry()) != null) {
                    String entryName = entry.getName();
                   
                        if ( entry.isDirectory() )
                        {
                                System.out.println("trovata cartella = " +entryName);
                               
                                (new File(dirOut, entryName)).mkdirs();
                        } else
                        {
                                System.out.println("trovato file = "+entryName);
                            int numBytes = 0;
                            byte[] data = new byte[BUFSIZE];
                            File entryOut = new File(dirOut, entryName);
                            FileOutputStream fos = new FileOutputStream( entryOut );
                            bos = new BufferedOutputStream(fos, BUFSIZE);
                            while((numBytes = zipFile.read(data, 0, BUFSIZE)) != -1) {
                                bos.write(data, 0, numBytes);
                            }
                            bos.flush();
                            bos.close();
                        }
                   
                }

                success = true;
            }

        } catch (IOException ioe) {
            ioe.printStackTrace();
            success = false;
        } finally {
            if (zipFile != null) {
                try {
                    zipFile.close();
                } catch (IOException ioe) { ioe.printStackTrace(); }
            }
        }

        return success;
    }

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Unzippare file.....bug di android?
« Risposta #1 il: 19 Luglio 2011, 20:29:05 CEST »
0
Le hai impostate le permission per scrivere nella sd?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Unzippare file.....bug di android?
« Risposta #2 il: 19 Luglio 2011, 21:55:34 CEST »
0
scusa, se ti trova:
cartella1/immagine.gif
te fai uno string.split("/") e per ogni i < lenght()-1 crei una cartella (nested). poi l'elemento in posizione length()-1 è il nome del file....
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline sgotenks

  • Utente junior
  • **
  • Post: 57
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Geeksphone zero
  • Sistema operativo:
    Windows
Re:Unzippare file.....bug di android?
« Risposta #3 il: 20 Luglio 2011, 00:07:28 CEST »
0
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Ho questa permission, presumo basti dato che il problema si verifica quando becca una cartella..............ma tra l'altro neanche sempre, a volte funziona, non so se sclera per colpa del nome di qualche cartella o carattere o x il numero di file...............x cui "correggere alla buona" splittanto non è neanche una soluzione perchè a volte riconosce la cartella come tale, la crea e poi guarda che c'è dentro........sl che non capiso qual'è la condizione che crea il problema.

Il punto vero è, dato che tutte le funzioni che ho provato sono corrette per decomprimere in java.............a questo punto il problema è qualcosa con android e il suo file system, ma mi sembra strano che nessuno abbia mai notato la cosa............

Offline sgotenks

  • Utente junior
  • **
  • Post: 57
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Geeksphone zero
  • Sistema operativo:
    Windows
Re:Unzippare file.....bug di android?
« Risposta #4 il: 20 Luglio 2011, 11:59:26 CEST »
0
Ho risoloto, ora sembrerebbe funzionare, vedremo se col tempo e testando mi ridarà problemi, ad ogni modo ho dovuto implementare un metodo x unzippare (con implementare intendo trovare su internet, copiare e adattare) un metodo che fa uso della livreria org.apache.commons.io.IOUtils;

altrimenti non c'era niente da fare.....se poi qualcuno volesse posto il codice a utilità generale....