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 :

Problème de read/write


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    mars 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème de read/write
    Bonjour,


    Je lis un fichier pdf par un bufferedreader et l'écrit par un bufferedwriter, or sous windows, j'obtiens deux textes différents (sous linux ça passe nickel). Apparement tous les combinaison ~+caractére sont remplacées par ?.

    Je n'ai vraiment aucune idée pour résoudre ce probléme, si quelqu'un pouvait m'aider, ce serait cool.

    Merci d'avance.

    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
    void getPDF(String lien,String nomfichier){ //lien a aspirer + nom du fichier de sortie
    		try{
    		URL u= new URL(lien) ;
    		HttpURLConnection huc=(HttpURLConnection) (u.openConnection()); 
    		BufferedReader d = new BufferedReader(new InputStreamReader(huc.getInputStream()));
    		File f=new File(nomfichier);
    		f.createNewFile() ;
    		BufferedWriter w= new BufferedWriter(new FileWriter(f));
    		int lu;
    		while ((lu=(d.read())) != -1){
    			w.write((char)lu);
    		}
     
    		w.close();
    		d.close();
     
    		}catch(Exception e){
    			e.printStackTrace();
    		}
     
    	}




    [Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java

  2. #2
    Membre régulier
    Inscrit en
    juin 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 65
    Points : 74
    Points
    74
    Par défaut
    T'aurais pas un problème d'encodage toi par hasard ?
    Si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import java.io.*;
    public class ShowEncoding {
    public static void main(String[] args) {
    System.out.println("Default encoding: " +
    new InputStreamReader(System.in).getEncoding());
    }
    }
    qu'est ce que ça affiche sous :
    - linux : je pense UTF8,
    - windows : je pense Cp1252.

    si c'est du Cp1252, alors il faut que tu lises/ecrives en spécifiant le charset UTF8.
    Par exemple comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(myFilePath,true),"UTF8");
    regarde la javadoc.

  3. #3
    Membre régulier
    Inscrit en
    juin 2004
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 65
    Points : 74
    Points
    74
    Par défaut
    il se peut aussi que tu aies besoin de ça.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mars 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2005
    Messages : 30
    Points : 36
    Points
    36
    Par défaut
    essaye en passant par des channel au lieu de parcourir tout le fichier.

    un truc comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FileChannel source = new FileInputStream("source").getChannel();
    FileChannel dest = new FileOutputStream("destin").getChannel();
     
    dest.transferFrom(source, 0, soiurce.size());

    Lis l'introduction de la javadoc de la classe FileChannel. http://java.sun.com/j2se/1.4.2/docs/api/java/nio/channels/FileChannel.html

    en tout cas, c'est beaucoup plus performant que ton parcours et moins de problèmes d'encodage vu que c'est géré dans une sorte de meta data de manière interne. ;-)

  5. #5
    KKI
    KKI est déconnecté
    Membre à l'essai
    Inscrit en
    mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Il est normal que tu es des problèmes d'encodage, tu lis (et écris) un fichier binaire avec des classes spécialisées dans le traitement des fichiers texte (avec tous les problèmes d'encodage que cela peut poser).

    Utilise plutôt un BufferedInputStream en entrée et un FileOutputStream en sortie.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    mars 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci à tous, j'ai compris l'erreur.

    J'ai mis un DataInputStream et FileOutPutStream et ça passe tout seul (quoique le temps de traitement est nettement plus long sous windows!??)

    Ciao

  7. #7
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : mai 2004
    Messages : 2 076
    Points : 2 328
    Points
    2 328
    Par défaut
    mdr KKI, est-ce que tu as lu TOUT le thread dont tu as posté le lien ? Comment il se fait défoncer le pauvre débutant (un peu flemmard c'est vrai).
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mars 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2005
    Messages : 30
    Points : 36
    Points
    36
    Par défaut
    mais pourquoi ne pas utiliser les api java.nio (new I/O API)

    les performances sont surprenantes.

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

Discussions similaires

  1. Problème read / write
    Par edgarjacobs dans le forum C
    Réponses: 5
    Dernier message: 23/06/2011, 09h35
  2. propriété read write
    Par new_wave dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 08/09/2006, 11h24
  3. problème avec ofstream::write
    Par b4u dans le forum SL & STL
    Réponses: 3
    Dernier message: 01/06/2006, 14h17
  4. Problème socket : le write ne se fait qu'au moment du close
    Par Synn dans le forum Développement
    Réponses: 6
    Dernier message: 23/05/2006, 15h16
  5. Problème avec document.write()
    Par d.w.d dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 19/01/2006, 12h06

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