Lire le contenu d'un fichier texte

Aller en bas

Lire le contenu d'un fichier texte Empty Lire le contenu d'un fichier texte

Message  Gus le Jeu 23 Sep - 1:40

La lecture d'un fichier texte est une opération très courante, qui se fait classiquement de la manière suivante :

public Object transform(Object obj) throws Exception
{
File file = (File)obj;
FileReader fr = new FileReader(file);
char[] a= new char[(int)file.length()];
fr.read(a,0,(int)file.length());
fr.close();
return new String(a);
}


Le problème de cette méthode est que dans le cas ou le fichier texte est encodé par un autre encodage que celui par défaut, le résultat sera un charabia de caractères digne du capitaine Haddock.

Nous allons présenter une entité qui fait appel à l'entité précédente de détection de charset afin d'offrir une méthode générique susceptible de lire correctement n'importe quel fichier texte, qu'il soit encodé en UTF8, UTF16 ou windows1252.

gus.file.read.text.txtfile

Code:
package gus05.entity.gus.file.read.text.txtfile;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import gus05.framework.core.Entity;
import gus05.framework.core.Outside;
import gus05.framework.core.Service;
import gus05.framework.features.Transform;

public class ReadTextTxtFile implements Entity, Transform {

    public String getName()         {return "gus.file.read.text.txtfile";}
    public String getCreationDate()      {return "2010.09.21";}

    private Service findCharset;
   
    public ReadTextTxtFile() throws Exception
    {findCharset = Outside.service(this,"gus.charset.findcharset.txtfile");}

    public Object transform(Object obj) throws Exception
    {
        File file = (File)obj;
        if(file.length()==0) return "";
       
        Charset charset = (Charset) findCharset.transform(file);
        if(charset==null) charset = Charset.defaultCharset();
       
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis,charset);   
        char[] a = new char[(int)file.length()];
        isr.read(a,0,(int)file.length());
        isr.close();
        return new String(a);
    }
}
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

Voir le profil de l'utilisateur http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum