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 :

[Erreur Stream closed] sur un read de BufferedInputStream


Sujet :

Collection et Stream Java

  1. #1
    Membre expérimenté Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Points : 1 464
    Points
    1 464
    Par défaut [Erreur Stream closed] sur un read de BufferedInputStream
    Bonjour,

    J'ai un bout de code qui récupère un fichier ZIP et en crée un tableau de byte[].

    J'ai réussi presque jusqu'au bout ... mais la dernière ligne (read du BufferedInputStream ), j'ai l'erreur java.io.IOException: Stream closed.



    La méthode (bout qui plante en violet en bas) :

    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
     /**
         * Retourne un tableau de byte du dossier à archiver (zip) dont le chemin est à passer en paramètre
         * @param String chemin du dossier a archiver
         * @param String chemin de la source en relatif
         * @param String chemin du fichier temporaire en xml contenant l'écran au format XML qui sera ajouté au zip dans le dossier racine \EcranXML
         * @return byte[] archive en tableau de byte
         * @throws SauvegardeBaseException 
         * @throws IOException 
         */
        public static byte[] genererArchive(String aCheminFichierAZipper, String vCheminSource, String aFichier) throws SauvegardeBaseException,
                                                                                                                IOException
        {
            byte[] vTableauArchiveRetour = null;
    
            //Generation du fichier zip dans un répertoire temporaire
            File vFichierCheminSource = new File(vCheminSource);
    
            String vPathCheminSource = vFichierCheminSource.getParent();
    
            vPathCheminSource = vPathCheminSource.substring(1, vPathCheminSource.length());
    
            String vRepertoireTemporaire = System.getProperty("java.io.tmpdir") + vPathCheminSource;
    
            List<FichierArchive> vListFicherArchive = new ArrayList<FichierArchive>();
            vListFicherArchive.add(new FichierArchive(aFichier, "EcranXML"));
    
            String vRacine = new File(aCheminFichierAZipper).getParent();
            for (String vElementAArchiver : new File(new File(aCheminFichierAZipper).getParent()).list())
            {
    
                //on test si l'élément trouvé est un fichier ou un dossier.
                //si s'est un fichier, on l'ajoute à la liste, si s'est un dossier on le parcourt pour l'ajouter à la liste
                vListFicherArchive = listeRepertoire(vRacine, vElementAArchiver, vFichierCheminSource, vListFicherArchive);
            }
    
            File vFichierTemporaire = new File(vRepertoireTemporaire + "\\archiveExportDonneesTemporaire.zip");
            if (!vFichierTemporaire.exists())
            {
                new File(vFichierTemporaire.getParent()).mkdirs();
            }
            FileUtils.genererArchive(vListFicherArchive, vFichierTemporaire);
    
            ZipFile vFichierTemporaireARetourner = new ZipFile(vRepertoireTemporaire + "\\archiveExportDonneesTemporaire.zip");
            //Récupération du zip crée et transformation en tableau de byte[]
            ZipEntry vZipEntry = new ZipEntry(vFichierTemporaireARetourner.getName());
            
            // On crée un tableau de byte avec une longueur égal à la taille du fichier
            vTableauArchiveRetour = new byte[(int) vFichierTemporaireARetourner.size()];
            // on crée un BufferedInputStream, qui va nous permettre de lire plusieurs byte d'un coup 
            BufferedInputStream in = new BufferedInputStream(vFichierTemporaireARetourner.getInputStream(vZipEntry));
            // On lit la totalité du ficher.
            //Le premier paramètre est le tableau de byte qui va recevoir les données,
            //le deuxième est la position dans le fichier où on commence à lire les données (donc zéro puisqu'on commence au début du fichier),
            //enfin le dernier paramètre est le nombre d'octet que l'on veut lire
            in.read(vTableauArchiveRetour);
    
            return vTableauArchiveRetour;
        }
    Une idée ?
    Merci
    (\ _ /)
    (='.'=)
    (")-(")

  2. #2
    Membre expérimenté Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Points : 1 464
    Points
    1 464
    Par défaut
    re,

    j'ai essayé en ajoutant un InputStream mais sans succés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BufferedInputStream in = new BufferedInputStream(vFichierTemporaireARetourner.getInputStream(vZipEntry));
            InputStream is = new BufferedInputStream(in); 
            // On lit la totalité du ficher.
            //Le premier paramètre est le tableau de byte qui va recevoir les données,
            //le deuxième est la position dans le fichier où on commence à lire les données (donc zéro puisqu'on commence au début du fichier),
            //enfin le dernier paramètre est le nombre d'octet que l'on veut lire
            is.read(vTableauArchiveRetour);
    (\ _ /)
    (='.'=)
    (")-(")

  3. #3
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    J'ai l'impression que tu utilises mal ZipEntry, mais à te lire je ne comprends pas ce que tu veux faire... Zipper un fichier ? Dézipper un fichier ? Mettre un fichier dans un tableau de bytes ?...

    En tous les cas tu pourras probablement avancer à partir ces exemples.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

Discussions similaires

  1. [Débutant] Erreur sur Binary.Read()
    Par Nixeus dans le forum C#
    Réponses: 0
    Dernier message: 16/02/2012, 17h59
  2. Erreur sur fonction READ (Communication Série)
    Par Kartoon67 dans le forum LabVIEW
    Réponses: 11
    Dernier message: 22/04/2009, 13h40
  3. Erreur de segmentation sur ifstream.close()
    Par tHE_fLAmMinG_mOE dans le forum SL & STL
    Réponses: 4
    Dernier message: 27/01/2009, 14h54
  4. Erreur Pilote ODBC sur pages ASP
    Par zouritte dans le forum ASP
    Réponses: 2
    Dernier message: 12/12/2004, 13h42
  5. Erreur ORA-01036 sur un XMLGRAM
    Par sch dans le forum XMLRAD
    Réponses: 5
    Dernier message: 07/09/2004, 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