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 :

[File] sauvegarder un inputStream


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut [File] sauvegarder un inputStream
    bonjour
    bon je bataille depuis 2 jours.
    j'ai un (ou une je sais pas^^) inpuStream, et je cherche à le sauvegarder dans un fichier temporaire (je récupere des pièces jointes d'un mail avec javamail et pour les ouvrir il faut que je les sauvegarde dans un fichier temporaire).
    pour le fichier temporaire j'utilise File.createTempFile().
    mon souci c'est je ne n'arrive pas a passé mes données qui sont dans la classe inputStream à ma classe File.
    je galere un peu beaucoup
    Est ce que qq peu m'aider, parce que là c'est la panique ^^

    merci d'avance.
    à bientot

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 201
    Par défaut
    regarde le FAQ java sur les fichier il y a comment faire des fichier temporaire

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    oui ca c bon la création du fichier
    ce que je n'arrive pas a faire c'est ce mettre ce que j'ai dans mon InputSream dans le fichier que je viens de créer

  4. #4
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Il faut creer un FileOutputStream avec ton objet File puis ecrire dedans tout ce que tu lis depuis le InputStream fournit par JavaMail.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    super merci ca marche sans problem.
    juste un dernier point sur lequel je bute, et je m'interroge
    je vous met deja 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
     
    try{
      File file = File.createTempFile(att.getFileName()," ");
      FileOutputStream out = new FileOutputStream(file.getPath());
      int data = att.getIn().read();
      while(data != -1){
        out.write(data);
        data = att.getIn().read();
      }
      String path= file.getPath();
      Runtime.getRuntime().exec( path );
    }
    catch( IOException IoExcep){
    ...
    deja quand je créé le fichier, par exemple "toto.txt" (je crécupere par ) le patch rajoute des chiffre a la fin :
    ...\Temp\toto.txt49177.
    Je me demande juste d'ou ca vient.
    sinon apparament pour demarré mon fichier (toto.txt) c'est pas bon.
    y a t il qq chose pour faire en sorte que le systeme d'exploitation demarre le bon logiciel avec le fichier.

    si qq un peu encore eclairer ma pauvre lenterne ^^

    merci

  6. #6
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    createTempFile() cree un fichier avec un nom temporaire. Tu n'as pas besoin de faire ca. Le FileINputStream va le faire.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    merci de prendre le temps de me repondre, mais desoler je ne comprend pas un truc.
    j'ai regardé la classe FileInputStream, et je ne vois pas comment elle crée un fichier temporaire.
    sinon pour en revenir a un autre probleme, supposons que je crée bien mon fichier toto.txt, comment est ce que je fais pour faire en sorte que windows lance l'editeur de texte par default pour lire ce fichier avec java.
    je pensais que avec Runtime.getRuntime().exec(..) marchait..

  8. #8
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Mais c'est toi qui a cree le fichier temporaire la. Utilise juste :

    FileOutputStream out = new FileOutputStream(attr.getFileName());

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    ok merci nickel ^^
    bon j'ai le path du fichier, quelles methodes dois-je utiliser pour ouvrir mon fichier avec le bon logiciel ( ce que n'ai pas moi qui vait faire a la main si c un .doc demarre word....):
    Runtime.getRuntime().exec( path ); ca ne marche pas...

    aller le dernier coup de pouce

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Pour cette question, je dirais que ça depend de l'Os mais je ne me souviens pas d'avoir que ce soit en DOS ou en shell Linuxque taper le nom d'un fichier permet de l'ouvrir avec l'application par defaut malheureusement.
    Mais il pourrait y avoir une astuce comme ouvrir le fichier avec un programme tel qu'un web-browser qui demande à l'usager que faire avec un fichier dont il ne sait pas lire le contenu.

    (Mozilla propose un choix par defaut tres souvent pertinent.)

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    ouai...
    enfin il doit bien exister un moyen pas trop compliqué pour faire comme si je double cliquait sur mon icon de fichier .doc, .pdf...
    enfin je pense (j'espere ^^ )

  12. #12
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Sous windows, tu peux faire "start machin.doc". Ca marche pour les pdf, ppt, et les pages web, je crois.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    en cherchant un peu j'ai trouvé qq truc mais aucun ne marche:

    Process proc = Runtime.getRuntime().exec("file:\\"+path );
    me fait un ioexecption 2 ( si je ne me troupe pas ca veut dir qu'il ne trouve pas le fichier... pourtant celui existe bien et quand je tape le path dans la commande de windows il m'ouvre bien le fichier.

    et

    Process proc = Runtime.getRuntime().exec("cmd \\c start "+path);

    la genial pas d'exception mais il ne se passe rien

    heu... une petite idée sur le probleme ? ^^

    ps et "start "+path me fait aussi un ioexception 2

  14. #14
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    C'est pas file:\\, c'est file://, c'est pas cmd.exe \\c c'est cmd.exe /c. Essaye "cmd.exe /c start " + fileName

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    excellent, mais je crois que j'ai un soucis avec le chemin :
    "C:\DOCUME~1\Syl\LOCALS~1\Temp\again13325.txt" quand il y a des ~ dans le chemin, il ne se passe rien...

  16. #16
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    C'est plutot quand tu as des espaces dans le chemin (qui deviennent des tildes au format 8.3). Entoure le chemin de guillemets.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    juste pour vous tenir au courant voila ce que j'ai finis par faire et ca marche (juste encore un probleme avec les piece jointes en base 64) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    InputStream in = att.getIn();
    FileOutputStream out = new FileOutputStream(System.getProperty("java.io.tmpdir")+att.getFileName());
    int data = in.read();
    while(data != -1){
    	out.write(data);
    	data = in.read();
    }
    Process proc = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+System.getProperty("java.io.tmpdir")+att.getFileName());
    encore merci de vos reponces
    a bientot

  18. #18
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Heu tu lis octet par octet, ca va etre super lent ton truc la. Tu devrais plutot lire des tableaux d'octets. Par exemple declare un byte[] b = new byte[32764] et ecris int read = in.read(b) et out.write(b, 0, read).

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Par défaut
    heu ouai merci du conceil,
    mais j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    in.reset();
    int nmbB = in.available();
    byte[] b = new byte[nmbB ];
    int read = in.read(b);
    out.write(b,0,read);
    nmbB vaut a chaque fois 0, je ne comprend pas pourquoi, in.available() doit bien me renvoyer le nombre d'octet lisible nan?

  20. #20
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Ce qui compte c'est la valeur renvoyee par read(). Tant qu'elle ne vaut pas -1 tu n'as pas atteint la fin du flux.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Sauvegarder document - Web File Properties
    Par fix105 dans le forum SharePoint
    Réponses: 2
    Dernier message: 22/01/2009, 11h18
  2. Sauvegarde en temps réel : Open file backup
    Par badr dans le forum Windows XP
    Réponses: 0
    Dernier message: 04/12/2008, 15h27
  3. InputStream sur une file
    Par igor24 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 22/04/2008, 00h52
  4. Réponses: 9
    Dernier message: 07/09/2006, 14h19
  5. [Servlet][IO]Ecrire un File à partir d'un InputStream
    Par ravioli dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 04/02/2004, 10h15

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