IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

[ZIP] zipper des fichiers de plus d'un mega


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 46
    Points : 34
    Points
    34
    Par défaut [ZIP] zipper des fichiers de plus d'un mega
    Bonjour,
    j'ai écrit un code en Java qui utilise la classe java.util.zip qui réalise la compression au format zip d'un répertoire contenat plusieurs fichiers.

    Ce programme marche bien avec de petits fichiers, mais ne prend pas en compte les fichiers lorsque ceux-ci sont gros (plus d'un méga).

    Pour plus de clarté voici le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    import java.util.zip.*;
    import java.util.* ;
    import java.io.* ;
    import java.io.File; //permet de lister les fichiers dans un répertoires
     
    public class compress
    {
    	public static void main(String [] argv) throws IOException
    	{
    		int BUFFER = 2048;
    		byte data[] = new byte[BUFFER];
    		File repertoire = new File("ACompresser");
                File fichier;
    		fichier = null;;
    		String [] listeFichiers;	
    	      listeFichiers = repertoire.list();
     
     
    		// Creation du flux de sortie
    		FileOutputStream dest = new FileOutputStream("archive.zip");
    		BufferedOutputStream buff = new BufferedOutputStream(dest); 
    		ZipOutputStream out = new ZipOutputStream(buff); 
     
    		//Méthode et taux de compression
    		out.setMethod(ZipOutputStream.DEFLATED);
    		out.setLevel(9);
     
     
    		//Fichier compression de chaque fichier du répertoire ACompresser
    		for (int i = 0; i < listeFichiers.length; i++)
    		{     
     
     
                     fichier = new File(listeFichiers[i]);
    		     if (fichier.exists())
    		     {	
                            System.out.println("Lecture aprés test d'existance");
    				System.out.println("Nom du fichier : " +  fichier.getName()); 
    				FileInputStream fi = new FileInputStream(listeFichiers[i]); 
    				BufferedInputStream buffi = new BufferedInputStream(fi);
    				ZipEntry entry = new ZipEntry(listeFichiers[i]);
     
    				//Affectation de l'entrée au flux de sortie
    				out.putNextEntry(entry);
     
    				//Ecriture des entrées dans le flux de sortie par paquet de taille égale aux tampons d'entrée et de sortie 
    				int count;
    				while((count = buffi.read(data, 0, BUFFER)) != -1)
    				{
    					out.write(data, 0, count);
    				} 
     
    				//Fermeture des flux
    				out.closeEntry();
    				buffi.close();
    		   }        
                }
    		out.close();
    	}
     
    }
    Est ce que quelqu'un saurait comment résoudre ce problème.

    Merci d'avance pour votre aide.

    [ Modéré par Viena ]
    Ajout d'un tag et modification du titre : Pour la compréhension de tous, utilisez un titre clair et les tags ! merci.

    Les Règles du Forum

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Bonjour,

    Je pense que ton problème se situe à ce niveau là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Ecriture des entrées dans le flux de sortie par paquet de taille égale aux tampons d'entrée et de sortie 
    int count; 
    while((count = buffi.read(data, 0, BUFFER)) != -1) 
    { 
    out.write(data, 0, count); 
    }
    Tu laisses ton offset à 0 au lieu de l'incrémenter à chaque passage, je ne suis pas sûr à 100% que ton erreur soit là, mais il y a des chances.
    K

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Je me suis fait une petite librairie pour compresser et décompresser des zip, amuse toi bien avec
    (désolé mais ya aucun commentaire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    import java.io.*; 
    import java.util.*; 
    import java.util.zip.*;
     
    public class ZipTools 
    {
        static public final int BUFFER_SIZE = 2048;   
     
     
        static public final void zip(File destination, File ...sources)
        throws FileNotFoundException, IOException
        {
            if(destination.exists())
            {
                destination.delete();
            }
            destination.createNewFile();
            FileOutputStream fos = new FileOutputStream(destination);
            ZipOutputStream zos = new ZipOutputStream(fos);
            for(File file : sources)
            {
                if(file.isDirectory())
                {
                    add(zos, file.getName() + "/", file);
                }
                else
                {
                    FileInputStream fis = new FileInputStream(file);
                    ZipEntry entry = new ZipEntry(file.getName());
                    zos.putNextEntry(entry);
                    byte[] buffer = new byte[BUFFER_SIZE];
                    int nbData;
                    while(fis.available() > 0)
                    {
                        nbData = fis.read(buffer);
                        zos.write(buffer, 0,  ((nbData > BUFFER_SIZE) ? BUFFER_SIZE : nbData));
                    }
                    fis.close();
                }
     
            }
            zos.close();
            fos.close();
        }
     
     
     
        static public final void add(ZipOutputStream zos, String entryPath, File source)
        throws FileNotFoundException, IOException
        {
            for(File file : source.listFiles())
            {
                if(file.isDirectory())
                {
                    add(zos, entryPath + file.getName() + "/", file);
                }
                else
                {
                    FileInputStream fis = new FileInputStream(file);
                    ZipEntry entry = new ZipEntry(entryPath + file.getName());
                    zos.putNextEntry(entry);
                    byte[] buffer = new byte[BUFFER_SIZE];
                    int nbData;
                    while((nbData = fis.available()) > 0)
                    {
                        fis.read(buffer);
                        zos.write(buffer, 0,  ((nbData > BUFFER_SIZE) ? BUFFER_SIZE : nbData));
                    }
                    fis.close();
                }
            }
        }
     
     
     
        static public final void unzip(ZipFile zipfile)
        throws IOException
        {
            File file = new File("gcp.tmp");
            String path = file.getAbsolutePath();
            path = path.substring(0, path.lastIndexOf(File.separatorChar));
            unzip(zipfile, path);
        }
     
        static public final void unzip(ZipFile zipfile, String destinationPath)
        throws IOException
        {
            Enumeration entries = zipfile.entries();
            ZipEntry entry;
            while (entries.hasMoreElements()) 
            {
                entry = (ZipEntry) entries.nextElement();
                extractZipEntry(zipfile, entry, destinationPath);
            }
        }
     
     
        static public final boolean extractZipEntry(ZipFile zipfile, 
                                           ZipEntry entry,
                                           String destinationPath)
        throws IOException
        {
            return extractZipEntry(zipfile, entry, destinationPath, true);
        }
     
        static public final boolean extractZipEntry(ZipFile zipfile, 
                                           ZipEntry entry,
                                           String destinationPath,
                                           boolean force)
        throws IOException
        {
            String entryPath = entry.getName();
            entryPath = entryPath.replace('/', File.separatorChar);
            File entryFile = new File(destinationPath + 
                                      File.separatorChar + 
                                      entryPath);
            if(entryFile.exists())
            {
                if(force)
                {
                    entryFile.delete();
                }
                else
                {
                    return false;
                }
            }
            String fileName = entryFile.getName();
            new File(entryFile.getParent()).mkdirs();
            entryFile.createNewFile();
            InputStream is = zipfile.getInputStream(entry);
            FileOutputStream fos = new FileOutputStream(entryFile);
            byte[] buffer = new byte[BUFFER_SIZE];
            int nbData = 0;
            while(is.available() > 0)
            {
                nbData = is.read(buffer);
                fos.write(buffer, 0,
                ((nbData > BUFFER_SIZE) ? BUFFER_SIZE : nbData));
            }
            fos.flush();
            fos.close();
            is.close();
            return true;
        }
    }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

Discussions similaires

  1. Zipper des fichiers en plusieurs fichiers zip selon la taille.
    Par kaygee dans le forum Développement Windows
    Réponses: 0
    Dernier message: 15/01/2015, 11h27
  2. Importation des fichiers les plus recents
    Par avantoux dans le forum VBA Access
    Réponses: 8
    Dernier message: 28/09/2007, 13h50
  3. Zipper des fichiers a la volé
    Par fatichcadao dans le forum ASP.NET
    Réponses: 7
    Dernier message: 18/09/2007, 12h39
  4. Copier_Coller et zipper des fichiers en même tps
    Par clemasson dans le forum ASP
    Réponses: 4
    Dernier message: 18/07/2007, 10h23
  5. zipper des fichiers
    Par indoparadize dans le forum C++
    Réponses: 6
    Dernier message: 17/08/2006, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo