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 :

[Fichier Zip] mon url n'est pas prise en compte


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut [Fichier Zip] ZIP file must have at least one entry
    Bonjour, je voudrais creer un fichier zippé dans un dossier specifique, mais l'url que je passe en parametre n'est pas prise en compte (pourtant elle est valide). Ce qui fait que je retoruve mon fichier zippé toujours dans mon dossier de projet, dans mon workspace.

    Voici mon appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myZip.zip("Export_device8full.zip", "C:/temp/testreunis/export");
    et voici ma methode pour zipper :
    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
     
    static void zip(String zipName, String url) {
    try {
    		ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipName));
    		zip.setMethod(ZipOutputStream.DEFLATED);
    		zip.setLevel(Deflater.BEST_COMPRESSION);
    		File dataDirectories = new File(url);			             FileInputStream emplacement = new FileInputStream(dataDirectories);
    		byte[] bytes = new byte[emplacement.available()];
    		emplacement.read(bytes);
     
    		ZipEntry entry = new ZipEntry(url);
    		entry.setTime(dataDirectories.lastModified());
    		zip.putNextEntry(entry);
    		zip.write(bytes);
    		zip.closeEntry();
    		emplacement.close();
    		zip.close();
    	} 
    	catch (FileNotFoundException fileNotFound) {} 
    	catch (IOException io) {}
    }
    Si quelqu'un voit où peut se situer mon erreur, je lui en serais tres reconnaissant si il me l'indiquée
    Cependant je vais essayer de trouver moi aussi

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tu aurais pompé du code sans le comprendre ?
    C'est le "zipName" qui est un chemin relatif ou absolu vers le fichier à zipper. Tu mets le nom sans répertoire, donc l'archive est créée dans le répertoire par défaut.
    Le second paramètre, "url", est le chemin à l'intérieur du zip.

    Donc pour placer le fichier zippé ailleurs, il faut ajouter un nom de répertoire à "zipName". Par contre, tu dois t'assurer que le ou les répertoires existent.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    J'avoue avoir trouvé sur internet ce code et pensais l'avoir compris mieux que ça
    Merci à toi dinobogan Je me fourvoyais completement

    Néanmoins, j'ai donc bien évidemment échangé mes parametres ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myZip.zip("C:/temp/testreunis/export", "Export_device8full.zip");
    mais maintenant, je n'ai plus du tout de résultat.

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    NAAAAAAAAAN c'est bon j'ai trouvé! et vite tellement mon erreur était grossiere. Je me precise, j'ai tout simplement pas donné un chemin correct. Il me fallais indiquer un nom de .zip à la fin de celui ci tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myZip.zip("C:/temp/testreunis/export/Export_device8full.zip", "");
    Bon et bien merci encore

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Bonjour,
    J'ai un souci du meme type que le premier ...
    Maintenant je suis en train de trouver comment faire pour compresser plusieurs fichiers d'un dossier (donc compresser un dossier :] ).

    Mais j'ai un message d'erreur qui apparait dans la console pour me signaler :
    Exception in thread "main" java.util.zip.ZipException: ZIP file must have at least one entry
    at java.util.zip.ZipOutputStream.finish(ZipOutputStream.java:304)
    at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:146)
    at java.util.zip.ZipOutputStream.close(ZipOutputStream.java:321)
    at test.Main.main(Main.java:36)
    Cela veux sans doute dire qu'il n'y a pas d'entrée. Je pense que mon erreur survient quand j'appel la methode avec le parametres (qui ne doivent pas être mis comme il faut)
    En tous cas un fichier zip est créé comme inscrit dans les parametres mais il est vide

    Voici l'appel que je fais dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ZipOutputStream stream = new ZipOutputStream(new FileOutputStream("C:/temp/testreunis/export/symbol.zip")); 
    		  	myZip.zipDirectory("C:/temp/testreunis/export/symbol", stream); 
    		  	stream.close();
    et voici ma methode pour zipper (je ne pense pas qu'elle soit faute car je me suis aidé d'un code trouvé sur internet et il me semble bon sauf erreur de ma part) :
    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
    public static void zipDirectory(String directory, ZipOutputStream stream) 
    	  { 
    	      try 
    	     {  
    	          Object zipDir = new File(directory); 
    	          String[] directoryList = ((File) zipDir).list(); 
    	          byte[] readBuffer = new byte[2156]; 
    	          int bytesIn = 0; 
    	          for(int i=0; i<directoryList.length; i++) 
    	          { 
    	              File f = new File(directoryList[i]); 
    	              if(f.isDirectory()) 
    	              { 
    	            	  String filePath = f.getPath(); 
    	            	  zipDirectory(filePath, stream); 
    	            	  continue; 
    	              } 
    	              FileInputStream fis = new FileInputStream(f); 
    	              ZipEntry anEntry = new ZipEntry(f.getPath()); 
    	              stream.putNextEntry(anEntry); 
    	              while((bytesIn = fis.read(readBuffer)) != -1) 
    	              { 
    	                  stream.write(readBuffer, 0, bytesIn); 
    	              } 
    	             fis.close(); 
    	          } 
    	     } 
    	     catch(Exception e) 
    	     {}
    	}
    J'espere que quelqu'un pourra me donner un petit coup de pouce Merci

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut ZIP file must have at least one entry
    Haaaa j'ai testé plein de truc et ça marche toujours pas...
    Lorsque je fait un affichage de f dans zipDirectory tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    File f = new File(directoryList[i]); 
    System.out.println("f = "+f);
    ça m'affiche (dans mon cas) "10.xml" si il existe
    je l'ai supprimé pour voir et ça m'affiche "11.xml" (Autant là je comprend pas trop pourquoi car dans mon dossier il y a environ 70 fichiers .xml nommé 1.xml 2.xml etc jusqu'a 70.xml ...)

    Ensuite, lorsque je fait un affichage de directoryList j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    directoryList = [Ljava.lang.String;@19821f
    Enfin, je sais que durant l'execution on ne rentre pas dans le if(f.isDirectory()) et pourtant c'est bien un directory que j'indique car String directory correspond à "C:/temp/testreunis/export/symbol/" non ?

    Bref je cherche je cherche mais je bloque pas mal quand même,

    I send a SOS to the wold, HELP ME please !

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Bon j'ai fait tout ce que je pense pouvoir faire avec mes connaissances en java (peu helas) et j'arrive à savoir où ça bloque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream fichier = new FileInputStream(f);
    mais je comprend pas pourquoi :/
    il me faut trouver le lien avec le message d'erreur de la console et là je bloque totalement ...

    Personne n'aurait une idée s'il vous plait ?

  8. #8
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    salut,

    il vaut mieux lire un tutoriel que de copier du code sans comprendre

    voilà un cours pas trop long, et assez simple: http://cyberzoide.developpez.com/java/zip/

    et voilà un exemple: http://java.developpez.com/sources/?...on%20ZIPetGZIP

    et en voilà un autre: http://java.developpez.com/sources/?...CompressionZip

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Merci herch mais j'ai deja téléchargé le cours en pdf mais je ne trouve pas dedans comment compresser soit un dossier soit plusieurs fichiers au sein d'un même dossier.
    J'arrive deja sans soucis à compresser et decompresser un fichier (mais juste un seul)

    Merci quand même.

  10. #10
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Je viens d'essayer avec le dernier de tes liens herch et ça me met :
    java.io.FileNotFoundException: 1.xml (Le fichier spécifié est introuvable)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:106)
    at java.io.FileInputStream.<init>(FileInputStream.java:66)
    at test.testzip.test(testzip.java:61)
    at test.Main.main(Main.java:33)
    Pour tester cette methode je mettais les parametres quand je faisis l'appel tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    testzip.test("C:/temp/testreunis/export/coucou/", "C:/temp/testreunis/export/coucou/symbol.zip");
    et la methode était :
    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
    public class testzip {
     
    	static final int BUFFER = 2048;
     
    		public static void test(String repCourant, String urlZip)
    		{
    		try {
     
          		// création d'un flux d'écriture sur fichier
    			FileOutputStream dest = new FileOutputStream(urlZip);
     
    			// calcul du checksum : Adler32 (plus rapide) ou CRC32
    			CheckedOutputStream checksum = new CheckedOutputStream(dest, new Adler32());
     
          		// création d'un buffer d'écriture
    			BufferedOutputStream buff = new BufferedOutputStream(checksum);
     
          		// création d'un flux d'écriture Zip
    			ZipOutputStream out = new ZipOutputStream(buff);
     
             	// spécification de la méthode de compression
    			out.setMethod(ZipOutputStream.DEFLATED);
    			// spécifier la qualité de la compression 0..9
    			out.setLevel(Deflater.BEST_COMPRESSION);
     
     
             	// buffer temporaire des données à écriture dans le flux de sortie
    			byte data[] = new byte[BUFFER];
     
     
     
    			// extraction de la liste des fichiers du répertoire courant
    			File f = new File(repCourant);
    			String files[] = f.list();
     
    			// pour chacun des fichiers de la liste
    			for (int i=0; i<files.length; i++) {
     
    				// en afficher le nom
    				System.out.println("Adding: "+files[i]);
     
               		// création d'un flux de lecture
    	            FileInputStream fi = new FileInputStream(files[i]);
     
    	            // création d'un tampon de lecture sur ce flux
    	            BufferedInputStream buffi = new BufferedInputStream(fi, BUFFER);
     
    	            // création d'en entrée Zip pour ce fichier
    	            ZipEntry entry = new ZipEntry(files[i]);
     
    	            // ajout de cette entrée dans le flux d'écriture de l'archive Zip
    	            out.putNextEntry(entry);
     
    	            // écriture du fichier par paquet de BUFFER octets
    	            // dans le flux d'écriture
    	            int count;
    	            while((count = buffi.read(data, 0, BUFFER)) != -1) {
    	               out.write(data, 0, count);
    				}
     
    				// Close the current entry
             		out.closeEntry();
     
             	    // fermeture du flux de lecture
    				buffi.close();
    			}
     
     
     
    			// fermeture du flux d'écriture
    			out.close();
    			buff.close();
    			checksum.close();
    			dest.close();
    			System.out.println("checksum: " + checksum.getChecksum().getValue());
    		// traitement de toute exception         
    		} 
    		catch(Exception e) 
    		{
    			e.printStackTrace();
    		}
       }
    }
    Lorsque je fait appel à la methode ne indiquant directement un fichier à compresser ça me met
    java.lang.NullPointerException
    at test.testzip.test(testzip.java:51)
    at test.Main.main(Main.java:33)
    Bon bah commence à penser que je ne vais jamais y arriver :/

  11. #11
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    salut,

    voici un exemple de compression d'un dossier

    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
     
    import java.io.*;
    import java.util.zip.*;
     
    public class TestZip
    {
    	ZipOutputStream zipOut;
    	public TestZip(String cheminRep, String cheminZip)
    	{
    		try{
    			zipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(cheminZip)));
    			compresserZipRepertoire(new File(cheminRep));
    			zipOut.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	private void compresserZipFichier(File f) throws IOException
    	{
    		BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
    		ZipEntry tmpEntry = new ZipEntry(f.getParentFile().getName() + File.separator + f.getName());
    		zipOut.putNextEntry(tmpEntry);
    		int c;
    		while ((c = in.read()) != -1)
    			zipOut.write(c);
    		in.close();
    	}
     
    	private void compresserZipRepertoire(File rep) throws IOException
    	{
    		File[] enfants = rep.listFiles();
    		for (int i = 0; i < enfants.length; i++)
    		{
    			if (!enfants[i].isDirectory())
    			{
    				compresserZipFichier(enfants[i]);
    			}
    			else
    			{
    				compresserZipRepertoire(enfants[i]);
    			}
    		}
    	}
    	public static void main(String[] args)
    	{
    		new TestZip(args[0], args[1]);
    	}
    }
    il prend comme paramètre le dossier à compresser et le fichier zip de sortie

  12. #12
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Je te remercie encore une fois herch
    Je ne pourrais le tester que demain au boulot (je suis en stage et on m'a chourré ma clé usb avec tous mes documents et logiciel dessu :/ )
    Merci en tous cas

    HS : vive One piece :]

  13. #13
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    salut,

    il y avait un problème de avec le code précédent, il représentait mal la hiérarchie du répertoire.

    voici le nouveau 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
     
    import java.io.*;
    import java.util.zip.*;
     
    public class TestZip
    {
    	ZipOutputStream zipOut;
    	File repRacine;
    	public TestZip(String cheminRep, String cheminZip)
    	{
    		repRacine = new File(cheminRep);
    		try{
    			zipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(cheminZip)));
    			compresserZipRepertoire(new File(cheminRep));
    			zipOut.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	private void compresserZipFichier(File f) throws IOException
    	{
    		BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
    		byte[] data = new byte[in.available()];
    		String cheminEntry;
    		if (f.getParentFile().equals(repRacine))
    			cheminEntry = f.getName();
    		else
    			cheminEntry = f.getPath().replace(repRacine.getPath()+File.separator, "");
    		ZipEntry tmpEntry = new ZipEntry(cheminEntry);
    		zipOut.putNextEntry(tmpEntry);
    		int c;
    		while ((c = in.read()) != -1)
    			zipOut.write(c);
    		in.close();
    	}
     
    	private void compresserZipRepertoire(File rep) throws IOException
    	{
    		File[] enfants = rep.listFiles();
    		for (int i = 0; i < enfants.length; i++)
    		{
    			if (!enfants[i].isDirectory())
    			{
    				compresserZipFichier(enfants[i]);
    			}
    			else
    			{
    				compresserZipRepertoire(enfants[i]);
    			}
    		}
    	}
    	public static void main(String[] args)
    	{
    		new TestZip(args[0], args[1]);
    	}
    }

  14. #14
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Points : 337
    Points
    337
    Par défaut
    Salut,

    Herch, je viens de tester ce code il marche à merveille je vais essayer de comprendre pourquoi il marche mieux que celui que j'executais avant (en plus il est facil à comprendre :] )
    Merci pour tout

    Bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.2] Ma variable n'est pas prise en compte
    Par beegees dans le forum Langage
    Réponses: 4
    Dernier message: 12/05/2009, 10h29
  2. Réponses: 2
    Dernier message: 27/04/2009, 09h32
  3. Réponses: 1
    Dernier message: 18/03/2009, 12h01
  4. Configuration n'est pas prise en compte.
    Par ARachid dans le forum Visual C++
    Réponses: 0
    Dernier message: 15/07/2008, 11h25
  5. Réponses: 3
    Dernier message: 13/02/2008, 16h07

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