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

API standards et tierces Java Discussion :

Convertir un fichier en String


Sujet :

API standards et tierces Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 16
    Par défaut Convertir un fichier en String
    Bonjour,
    je cherche un moyen rapide de convertir le contenu d'un fichier en String (dans le but de l'inclure dans un fichier XML). Pour l'instant je fais de cette manière :

    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
    public static String affiche(String nomFichier) {
            String retour = "";
     
        	try {
                FileReader reader = new FileReader(nomFichier);
                int lu;
                char c;
                do {
    <div style="margin-left:40px">                // on lit un caractère sous forme d'un entier:
                    lu = reader.read(); 
                    if (lu != -1) { // si on est pas à la fin du fichier
                       <div style="margin-left:40px"> c = (char) lu;
                        retour += c;</div>}</div>
                } while (lu != -1); // tant que l'on est pas à la fin du fichier
                reader.close();
                return retour;
            } catch (Exception e) {
            	return "";
            }
        }
    mais cela met 30 secondes pour un fichier de 45ko. Si quelqu'un avait des pistes pour aller plus vite, ca m'aiderait beaucoup.
    D'avance merci.

  2. #2
    Membre expérimenté Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Par défaut
    Slt,

    pour commencer tu pourrais utiliser la classe BufferedReader pour lire ligne par ligne plutot que par caracteres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BufferedReader buf = new BufferedReader(new FileReader(nomFichier));
    String line = buf.readLine();
    Maintenant si tu veux ke ca aille plus vite je ne pense pas qu'on puisse lire plus vite que ca. Les traitement de fichier restent en general assez longs.

  3. #3
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    je pense que pour concaténer ce que tu lis tu devrais utiliser un StringBuffer (en 1.4 en tout cas), ya un autre type d'objet en 1.5 mais j'ai oublié le nom exact (genre StringBuilder)

    Apres tu le transforme en String si tu veux ...

  4. #4
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    tu peux tout aussi bien utiliser un Vector<String>, très pratique aussi.

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par NeptuS
    tu peux tout aussi bien utiliser un Vector<String>, très pratique aussi.
    Pour la performance il vaut mieux éviter Vector qui est Thred-safe et plutôt utiliser une ArrayList .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 16
    Par défaut StringBuffer
    Merci pour vos réponses, avec le StringBuffer c'est quasi instantané !

    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
    public static String afficheRapide(String nomFichier) {
            StringBuffer retour = new StringBuffer();
     
        	try {
                FileReader reader = new FileReader(nomFichier);
                int lu;
                char c;
                do {
    <div style="margin-left:40px">// on lit un caractère sous forme d'un entier:
                    lu = reader.read(); 
                    if (lu != -1) { // si on est pas à la fin du fichier
                        <div style="margin-left:40px">c = (char) lu;
                        retour.append(c);</div>}</div>                
                } while (lu != -1); // tant que l'on est pas à la fin du fichier
                reader.close();
                return retour.toString();
            } catch (FileNotFoundException e) {
                System.out.println("Impossible de lire le fichier "+nomFichier+" ! " +e);
                return "";
            } catch (IOException e) {
            	System.out.println("Erreur de lecture !" +e);
            	return "";
            }

  7. #7
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Pourquoi tu ne lis pas ligne par ligne comme te le suggérais fumiste972 ?

    C'était une bonne idée je pense

  8. #8
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 16
    Par défaut encore plus rapide
    Je vous propose une autre solution qui semble être encore plus rapide :

    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
     public static String afficheUltraRapide(String nomFichier) {
        	String retour;
        try{
        	File f = new File(nomFichier);
            byte[] buffer = new byte[(int)f.length()];
            DataInputStream in = new DataInputStream(new FileInputStream(f));
            in.readFully(buffer);
            in.close();
        	retour = new String(buffer);
                return retour;
            } catch (FileNotFoundException e) {
                System.out.println("Impossible de lire le fichier "+nomFichier+" ! " +e);
                return "";
            } catch (IOException e) {
            	System.out.println("Erreur de lecture !" +e);
            	return "";
            }
        }

  9. #9
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ou encore un petit peu plus rapide en utilisant les channels nio:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                File f = new File("chemin");
                FileChannel channel = new FileInputStream(f).getChannel();
                ByteBuffer b = ByteBuffer.allocate((int) channel.size());
                channel.read(b);
                channel.close();
                String s = new String(b.array());

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Juste une remarque : pensez à fermer proprement vos flux !!! Dans les codes que vous donnez le flux ne sera pas fermé en cas d'exception...

    Il suffit simplement d'utiliser un try/finally pour obtenir un code plus sécurisé. Par exemple pour les deux derniers codes cela pourrait donner (si on se contente de renvoyer l'exception) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public static String afficheUltraRapide(String nomFichier) throws IOException {
            DataInputStream in = new DataInputStream(new FileInputStream(nomFichier));
            try{
                File f = new File(nomFichier);
                byte[] buffer = new byte[(int)f.length()];
                in.readFully(buffer);
                return new String(buffer);
            } finally {
                in.close();
            }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public static String load(File f) throws IOException {
            FileChannel channel = new FileInputStream(f).getChannel();
            try {
                ByteBuffer b = ByteBuffer.allocate((int) channel.size());
                channel.read(b);
                return new String(b.array());
            } finally {        
                channel.close();
            }
        }
    a++

  11. #11
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    On est d'accord, juste que j'avais la flemme d'ouvrir une usine à gaz pour tout faire....

    Je crois qu'on peut définitivement me ranger au rang pourrave sur l'étagère des chiottes (sisi celle où l'on ne met que ce qui ne sert à rien et que l'on garde par acquis de conscience)

  12. #12
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sinok
    On est d'accord, juste que j'avais la flemme d'ouvrir une usine à gaz pour tout faire....
    Mais je préfère toujours préciser car il se trouve que peu de monde utilise les bloc try/finally... et ce n'est pas vraiment une usine à gaz...

    Citation Envoyé par sinok
    Je crois qu'on peut définitivement me ranger au rang pourrave sur l'étagère des chiottes (sisi celle où l'on ne met que ce qui ne sert à rien et que l'on garde par acquis de conscience)
    Meuuuh non !!!


    a++

  13. #13
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    L'usine à gaz c'était éclipse pour le coder.... Puis je fais la grève du codage dans ma boite aujourd'hui de toute façon.

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

Discussions similaires

  1. Convertir un fichier XML en String
    Par soukaina123 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 30/06/2014, 14h16
  2. comment convertir un fichier xml en tableau de string (java)
    Par l'indien dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/02/2006, 21h00
  3. Réponses: 2
    Dernier message: 17/08/2004, 14h27
  4. [exe] convertire un fichier java en executable?
    Par Toosek dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 27/01/2004, 10h49
  5. [] Convertir un fichier word en pdf
    Par SpaceFrog dans le forum VBA Word
    Réponses: 7
    Dernier message: 06/12/2002, 15h27

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