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

Collection et Stream Java Discussion :

zipper une string


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut zipper une string
    Bonjour

    Un petit pb
    J'ai une string que je veux zipper, le pb est que en première ligne de la string zippée je me retrouve avec une dizaine de caractères incohérant:

    -> ¬í | J·8------------------Sauvegarde de la Base de données

    Nota: le défaut est apparement créé lors de l'enregistrement du fichier /tmp/sauvagarde.sql

    Code java : 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
     
    package librairie;
     
     
    import java.io.*;
    import java.util.*;
    import java.util.zip.*;
    import java.util.Enumeration;
    import java.text.*;
    import sun.text.Normalizer;
     
    	/**
             * Classe de création d'une archive Zip
             * à partir des fichiers du répertoire courant.
             *
             * D'après un exemple de la documentation officielle Java Sun
             * http://java.sun.com/developer/technicalArticles/Programming/compression/
             *
             * Author: Hugo ETIEVANT
             */
    	public class Zip {
     
    		/**
                     * Taille générique du tampon en lecture et écriture
                     */
    		static final int BUFFER = 2048;
     
    		//public static String unAccent(String s) {
    		//	String temp = Normalizer.normalize(s, Normalizer.DECOMP, 0);
    		//	return temp.replaceAll("[^\\p{ASCII}]","");
    		//}
     
    		/**
                     * Programme principal.
                     */
    		public static String main ( String texte) {
     
    			String fichierZip = "/tmp/archive.zip";
    			String file_a_archiver = "/tmp/sauvagarde.sql";
     
    	   		/*************
                             * Compression
                             *************/
    			try {
    				//création du fichier
    				ObjectOutputStream fileout = new ObjectOutputStream (new FileOutputStream(file_a_archiver));
    				fileout.writeObject(texte);
    				fileout.close();
     
     
    	      		// création d'un flux d'écriture sur fichier
    				FileOutputStream dest = new FileOutputStream(fichierZip);
     
    				// 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 à écrire dans le flux de sortie
    				byte data[] = new byte[BUFFER];
     
    	           	// création d'un flux de lecture
    		        FileInputStream fi = new FileInputStream("/tmp/sauvagarde.sql");
     
    		        // création d'un tampon de lecture sur ce flux
    		        BufferedInputStream buffi = new BufferedInputStream(fi, BUFFER);
     
    		        // création d'une entrée Zip pour ce fichier
    		        //ZipEntry entry = new ZipEntry(unAccent("archive.sql"));
    		        ZipEntry entry = new ZipEntry("archive.sql");
     
    		        // 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();}
     
    			try{
    		   		File file = new File(file_a_archiver);
    		   		if(file.exists()){file.delete();}
    		   		file = null;
    		   	}catch (Exception e) {}
     
     
    	      return(fichierZip);
    	   }
     
    }

    Ou est le bug

    Merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu a utilisé ObjectOutputStream, qui sert à sérializer des objet, pas a écrire du texte. Utilise plutot un PrintWriter pour écrire ton fichier sql.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Tu peux éliminer l'étape de la création du fichier. Ton code ressemblera un peu à ça
    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
    try {
    				//création du fichier -> PAS BESOIN DE CA
    				//ObjectOutputStream fileout = new ObjectOutputStream (new FileOutputStream(file_a_archiver));
    				//fileout.writeObject(texte);
    				//fileout.close();
     
     
    	      		// création d'un flux d'écriture sur fichier
    				FileOutputStream dest = new FileOutputStream(fichierZip);
     
    				// 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 à écrire dans le flux de sortie
    				byte data[] = new byte[BUFFER];
     
    	           	// création d'un flux de lecture
    		        FileInputStream fi = new FileInputStream("/tmp/sauvagarde.sql");
     
    		        // création d'un tampon de lecture sur ce flux
    		        BufferedInputStream buffi = new BufferedInputStream(fi, BUFFER);
     
    		        // création d'une entrée Zip pour ce fichier
    		        //ZipEntry entry = new ZipEntry(unAccent("archive.sql"));
    		        ZipEntry entry = new ZipEntry("archive.sql");
     
    		        // 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);}
                            //Il suffit de transformer ton String -> byte[] en supposant que tu utilise ASCII
                            out.write(texte.getBytes());
     
    				// 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();}
     
    			/*try{
    		   		File file = new File(file_a_archiver);
    		   		if(file.exists()){file.delete();}
    		   		file = null;
    		   	}catch (Exception e) {}*/

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    petit commentaire sur ce bout de code:
    //Il suffit de trasformer ton String -> byte[] en supposant que tu utilise ASCII
    out.write(texte.getBytes());


    texte.getbytes() n'utilise pas l'ascii, il utilise "l'encodage par défaut de la plateforme en cours d'utilisation", ca peut donc etre de l'iso-8859-1, de l'utf-8, du cpxxx, de l'ebcdic ou autre curiosité.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    En tout cas pour Windows c'est iso 8859-1 qui est inclut l'ascii

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    Ok merci
    J'avais cherché une solution pour ne pas enregistrer le fichier mais n'avais rien trouvé. Au passage si je ne crée pas le fichier sur le disque par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileOutputStream fileout = new FileOutputStream(file_a_archiver);
    j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream fi = new FileInputStream(file_a_archiver);
    De plus hé bien j'ai justement un petit pb de plateforme, window majoritairement mais aussi du linux et là c'est pas le top surtout que le gus qui l'a installée est parti, que personne n'a pris la relève, et que la caisse est vide.
    Donc il va faloir forcer l'utf-8 ou l'iso-8859-1 pour être sûr du résultat car le cp1242 linux connait pas.

Discussions similaires

  1. [JDBC] Forcer la taille d'une string
    Par julio123 dans le forum JDBC
    Réponses: 4
    Dernier message: 10/06/2004, 09h43
  2. [DOM] parser une String pour en faire un document XML
    Par Fladnag dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 29/03/2004, 11h04
  3. [Débutant][JSP] Ajout des caractères à une String...
    Par Henkyl dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 04/03/2004, 16h30
  4. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum Débuter
    Réponses: 4
    Dernier message: 14/08/2003, 16h26
  5. Réponses: 6
    Dernier message: 24/07/2003, 12h39

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