jueves, 6 de septiembre de 2012

Codificación de archivos en Java

Es importante al crear un archivo en Java asignarle una codificación, de lo contrario tendremos problemas al utilizar caracteres especiales como la 'ñ', 'ß' etc; que sean mayores al 127 en sistema decimal o bien al 0111 1111 en sistema binario, por lo tanto se utilizará la codificación UTF-8 para poder escribir estos caracteres, y de igual forma cuando ya los tengamos en la codificación deseada debemos leerlos en el formato que los necesitemos si los ocuparemos para mostrarlos o bien para escribirlos en otro lugar.

Ejemplo para crear un archivo en lenguaje java con el IDE Eclipse.

package codificaciondearchivos;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class ReadandWriteCodingFiles {
 
 private String file= "/home/archivo.txt";
 
 public void writeFile () throws IOException{
  
  
  Writer write = null;
  
        try {
            write = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(file),"UTF8"));
            write.write("Este es un archivo con codificación utf-8\n" +              
              "éste es Beta: ß\n" +
              "estos son letras con acento: áéíóú");
            
        }
        catch(Exception e){
         e.printStackTrace();
        }
        
        finally{
         write.close();
        }
 }
 
 public void readFile () throws IOException{
  
  String stringCadena = "";
        new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), "UTF8"));        

        BufferedReader  in = new BufferedReader (new InputStreamReader (new FileInputStream (file), "utf-8"));
        try{            
            while ((stringCadena = in.readLine())!=null) {
                  System.out.println(stringCadena);
                  
            }                                    
        }
        catch (Exception e){

        }
        finally{            
          in.close();  
        }
  
 }
 

 /**
  * @param args
  * @throws IOException 
  */
 public static void main(String[] args) throws IOException {
  ReadandWriteCodingFiles readandWriteCodingFiles = new ReadandWriteCodingFiles();
  readandWriteCodingFiles.writeFile(); 
  readandWriteCodingFiles.readFile();
 }

}
El archivo siguiente es el que será generado, y el formato lo podemos observar al abrirlo con notepad++ que es utf-8.

Y en consola con el método de leer el archivo podemos observar esto de salida.
Es importante darle formato a nuestros archivos ya que en ocasiones podemos tener el IDE configurado para que nos muestre en formato UTF-8 y no notaremos caracteres raros al imprimir en consola pero cuando se usen en algún servidor de versiones por ejemplo SVN con distintos formatos causarán conflicto con otros usuarios que descarguen el proyecto.