Projet gus05 de développement Java
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -39%
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
Voir le deal
399 €

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 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

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