Envío de archivo de texto desde Android

publicado por: Anonymous

Que tal amigos, estoy desarrollando una aplicación que genera un archivo de texto (.txt) con múltiples líneas obtenidas de una BD, para luego enviar a través de un correo, el problema es cuando se recibe el correo y al ver el archivo en una PC, el texto sale en una sola línea, al ver el mismo archivo en el celular si tiene el salto de línea.

Este es el código que uso para concatenar y guardar en un archivo de texto:

BufferedWriter fileWritter = new BufferedWriter(new FileWriter("/sdcard/arhivos/"+currentDate)); //ubicacion y nombre del archivo
while(c.moveToNext()){                               
  registros = String.format(codigoReloj + c.getString(0).toString() + c.getString(1).toString().replace("/", "") + c.getString(2).toString().replace(":", "")+"n");
  fileWritter.append( registros );
  fileWritter.flush();
  registros = "";
}
fileWritter.close();

Este es el código que uso para enviar el archivo

Intent emailIntent = new Intent(Intent.ACTION_SEND);         
     emailIntent.setType("message/rfc822");
     emailIntent.setData(Uri.parse("mailto:"));
     emailIntent.putExtra(Intent.EXTRA_EMAIL, to);
     emailIntent.putExtra(Intent.EXTRA_CC, cc);
     emailIntent.putExtra(Intent.EXTRA_SUBJECT, asunto);
     emailIntent.putExtra(Intent.EXTRA_TEXT, mensaje);
     emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+"/storage/sdcard0/archivos/"+ asunto)); 
     emailIntent.setType("text/plain"); //indicamos el tipo de dato      
     startActivity(Intent.createChooser(emailIntent, "Email "));

Ya intenté generar el archivo con:

writer.newLine();
System.getProperty("line.separator");
String.format("%n");

Con estas opciones en el celular se visualiza los saltos de líneas, luego de enviarlo y ver el archivo en una PC, el texto sale en una sola línea.

solución

Este parece ser un problema relacionado con la diferente representación del carácter de nueva línea, dependiente del sistema operativo. De acuerdo con Nueva línea – Wikipedia (énfasis agregado):

Las diferentes representaciones de la nueva línea en los sistemas operativos a veces causan que al transferir un fichero entre dos ordenadores, se muestre incorrectamente. Por ejemplo, en condiciones normales, los ficheros creados en sistemas Unix o Apple Macintosh se verán como una línea larga en Windows. Y a la inversa: los ficheros creados en un ordenador con Windows se verán extraños con algunos editores, ya que el CR extra que Unix no necesita se mostrará como un ^M al final de cada línea.

Típicamente el carácter de nueva línea se representa como:

  • n = LF (Salto de línea) Usado como carácter de nueva línea en Unix.
  • r = CR (Retorno de carro) Usado como carácter de nueva línea en Mac OS.
  • rn = LF CR Usado como carácter de nueva línea en Windows y MS-DOS.

Cuando mencionas:

Con estas opciones en el celular se visualiza los saltos de lineas, luego de enviarlo y ver el archivo en una PC, el texto sale en una sola línea.

Entonces, asumiendo que por PC te refieres a una computadora con Windows, el carácter de nueva línea que debes usar es rn. En otras palabras:*

fileWritter.append(registros)
           .append("rn");

────────
* En este pequeño ejemplo, registros no debe contener r o n. Se recomienda agregar el carácter de nueva línea en una llamada independiente a .append. Adicionalmente, también se recomienda, para mejorar el rendimiento, hacer flush justo antes de cerrar la instancia de Writer.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *