J'ai un dossier zip sur ma carte SD, comment décompresser le dossier (dans mon code de demande)? p>
3 Réponses :
static Handler myHandler; ProgressDialog myProgress; public void unzipFile(File zipfile) { myProgress = ProgressDialog.show(getContext(), "Extract Zip", "Extracting Files...", true, false); File zipFile = zipfile; String directory = null; directory = zipFile.getParent(); directory = directory + "/"; myHandler = new Handler() { @Override public void handleMessage(Message msg) { // process incoming messages here switch (msg.what) { case 0: // update progress bar myProgress.setMessage("" + (String) msg.obj); break; case 1: myProgress.cancel(); Toast toast = Toast.makeText(getContext(), "Zip extracted successfully", Toast.LENGTH_SHORT); toast.show(); provider.refresh(); break; case 2: myProgress.cancel(); break; } super.handleMessage(msg); } }; Thread workthread = new Thread(new UnZip(zipFile, directory)); workthread.start(); } public class UnZip implements Runnable { File archive; String outputDir; public UnZip(File ziparchive, String directory) { archive = ziparchive; outputDir = directory; } public void log(String log) { Log.v("unzip", log); } @SuppressWarnings("unchecked") public void run() { Message msg; try { ZipFile zipfile = new ZipFile(archive); for (Enumeration e = zipfile.entries(); e.hasMoreElements();) { ZipEntry entry = (ZipEntry) e.nextElement(); msg = new Message(); msg.what = 0; msg.obj = "Extracting " + entry.getName(); myHandler.sendMessage(msg); unzipEntry(zipfile, entry, outputDir); } } catch (Exception e) { log("Error while extracting file " + archive); } msg = new Message(); msg.what = 1; myHandler.sendMessage(msg); } @SuppressWarnings("unchecked") public void unzipArchive(File archive, String outputDir) { try { ZipFile zipfile = new ZipFile(archive); for (Enumeration e = zipfile.entries(); e.hasMoreElements();) { ZipEntry entry = (ZipEntry) e.nextElement(); unzipEntry(zipfile, entry, outputDir); } } catch (Exception e) { log("Error while extracting file " + archive); } } private void unzipEntry(ZipFile zipfile, ZipEntry entry, String outputDir) throws IOException { if (entry.isDirectory()) { createDir(new File(outputDir, entry.getName())); return; } File outputFile = new File(outputDir, entry.getName()); if (!outputFile.getParentFile().exists()) { createDir(outputFile.getParentFile()); } log("Extracting: " + entry); BufferedInputStream inputStream = new BufferedInputStream(zipfile .getInputStream(entry)); BufferedOutputStream outputStream = new BufferedOutputStream( new FileOutputStream(outputFile)); try { IOUtils.copy(inputStream, outputStream); } finally { outputStream.close(); inputStream.close(); } } private void createDir(File dir) { log("Creating dir " + dir.getName()); if (!dir.mkdirs()) throw new RuntimeException("Can not create dir " + dir); } } This is what worked for me thanks people
Quel est le cas 2 pour Handlemessage ()? Je ne vois pas de msg.Qu'est-ce que = 2.
Ça marche pour moi, mais si je télécharge le fichier zip du serveur, décalez-le, il me montre l'erreur Java.Util.zip.zipException: EOCD non trouvé, ayez-en une idée à ce sujet
J'utilise une version modifiée de la méthode du débutant qui s'étend sur l'asyncaptage et peut mettre à jour les observateurs sur le fil principal. L'octet par la compression octet est extrêmement lent et doit être évité. Au lieu de cela, une approche plus efficace consiste à copier de gros morceaux de données dans le flux de sortie.
private void unzipWebFile(String filename) { String unzipLocation = getExternalFilesDir(null) + "/unzipped"; String filePath = Environment.getExternalStorageDirectory().toString(); UnZipper unzipper = new UnZipper(filename, filePath, unzipLocation); unzipper.addObserver(this); unzipper.unzip(); }
Où obtenir IOUTILS et comment l'installer?
IOUTILS CODE> fait partie de Apache Commons io Commons.apache.org/proper / Commons-io
juste "addon" pour @ rich.e Réponse:
in doInfbackground () code> Après itération via des zipétries, vous devez fermer le fichier, car parfois vous voulez supprimer le fichier après le décompresser et Il jette une exception si le fichier n'était pas fermé: p>
Je présume que vous avez ajouté la permission d'accéder au stockage externe?