J'ai un grand fichier de données, qui est zippé, et environ 20 Mo. Quand il est décompressé, cela représente environ 50 Mo. Le code source suivant fonctionne correctement. J'ai trouvé l'original sur le web ailleurs et l'ai modifié un peu. Et cette méthode est appelée dans AsyncTask.doInBackground. Donc, ce que je veux savoir est, comment puis-je sauvegarder le statut en cours (? Désolé, je ne connais pas le mot anglais approprié) et reprendre la procédure plus tard? Je veux dire, cette méthode prend un peu de temps (environ une minute sur un émulateur), et je sais qu'il n'y a aucun moyen puisque les données sont assez énormes. Donc, si une activité principale de cette méthode est détruite, je veux enregistrer l'état actuel de la décompression du fichier, et quand l'activité est active, je veux reprendre la décompression du dernier point. J'espère que mon explication clarifie mon intention.Comment décompresser un gros fichier de données dans AsyncTask.doInBackground?
Je pensais utiliser un service, mais je veux aussi interagir avec l'interface utilisateur, comme montrer un progrès ou quoi que ce soit. Je ne peux pas trouver de bonnes informations pour faire cela dans le service lorsque je scanne grossièrement la référence, mais y a-t-il un moyen de le faire dans le service? Et pensez-vous que je devrais l'utiliser?
Quoi qu'il en soit, mon point principal est de savoir comment reprendre la décompression d'un fichier.
private final static int CHUNK_SIZE = 32 * 1024;
byte[] _fileIOBuffer = new byte[CHUNK_SIZE];
public void unzipFile(DBFileDownloader downloader, File zipFile, String directory)
throws IOException
{
ZipInputStream in = null;
FileOutputStream os = null;
try
{
in = new ZipInputStream (new FileInputStream(zipFile));
ZipEntry entry = null;
while ((entry = in.getNextEntry())!= null)
{
String entryName = entry.getName();
if (entry.isDirectory()) {
File file = new File (directory, entryName);
file.mkdirs();
}
else {
File file = new File(directory, entryName);
if (file.exists()){
file.delete(); // I don't know how to append, so delete it always
}
os = new FileOutputStream (file);
int bytesRead = 0;
while ((bytesRead = in.read (_fileIOBuffer))!= -1) {
os.write(_fileIOBuffer, 0, bytesRead);
// progress procedure
}
os.close();
}
}
}
catch (FileNotFoundException e) {
Log.v("unzip", e.getMessage());
}
catch (IOException e) {
Log.v("unzip", e.getMessage());
}
finally{
if (in != null){
in.close();
}
if (os != null){
os.close();
}
}
}
Merci à l'avance, yokyo
+1 pour partager le code – Pentium10
Merci de partager le code! Je l'ai cherché longtemps, très longtemps! – Force