32 votos

Retorno del transporte \Line alimentar en Java

He creado un archivo de texto en el entorno de Unix usando código Java.

Para escribir el archivo de texto que estoy usando java.io.FileWriter y BufferedWriter . Y para la nueva línea después de cada fila que estoy usando bw.newLine() método (donde bw es objeto de BufferedWriter ).

Y estoy enviando ese archivo de texto adjuntándolo en el correo desde el propio entorno Unix (automatizado que usando comandos Unix).

Mi problema es que, después de descargar el archivo de texto del correo en un sistema Windows, si yo abrió ese archivo de texto los datos no están correctamente alineados. newline() El personaje es no funciona, creo que sí.

Quiero la misma alineación de archivos de texto que en el entorno de Unix, si abro el archivo de texto en el entorno de Windows también.

¿Cómo resuelvo el problema?

El código Java de abajo para su referencia (ejecutándose en un entorno Unix):

File f = new File(strFileGenLoc);
BufferedWriter bw = new BufferedWriter(new FileWriter(f, false));
rs = stmt.executeQuery("select * from jpdata");
while ( rs.next() ) {
    bw.write(rs.getString(1)==null? "":rs.getString(1));
    bw.newLine();
}

40voto

James B Puntos 1842

Java sólo conoce la plataforma en la que se está ejecutando actualmente, por lo que sólo puede dar una salida dependiente de la plataforma en esa plataforma (usando bw.newLine() ) . El hecho de que lo abras en un sistema Windows significa que tienes que convertir el archivo antes de usarlo (usando algo que hayas escrito, o usando un programa como unix2dos), o tienes que dar salida al archivo con retornos de carro en formato Windows en él originalmente en tu programa Java. Así que si sabes que el archivo siempre se abrirá en una máquina de Windows, tendrás que dar salida

bw.write(rs.getString(1)==null? "":rs.getString(1));
bw.write("\r\n");

Cabe señalar que no se podrá producir un archivo que se vea correcto en ambas plataformas si sólo se trata de texto plano que se está utilizando, tal vez convenga considerar el uso de html si se trata de un correo electrónico, o de xml si se trata de datos. Alternativamente, puede que necesites algún tipo de cliente que lea los datos y luego los formatee para la plataforma que el espectador esté usando.

4voto

nc3b Puntos 6704

El método newLine() asegura que se añada una nueva línea compatible con la plataforma ( 0Dh 0Ah para DOS, 0Dh para los Macs mayores, 0Ah para Unix/Linux). Java no tiene forma de saber en qué plataforma vas a enviar el texto. Esta conversión debe ser realizada por las entidades emisoras de correo.

3voto

Axel Puntos 6352

No sé quién mira tu archivo, pero si lo abres en el bloc de notas en vez de en el de texto, los saltos de línea se mostrarán correctos. En caso de que uses una extensión especial de archivo, asócialo al bloc de notas y listo. O usa cualquier otro editor de texto más avanzado.

2voto

Vaishak Suresh Puntos 1961

bw.newLine(); no puede asegurar la compatibilidad con todos los sistemas.

Si estás seguro de que se abrirá en Windows, puedes formatearlo a Windows newline.

Si ya estás usando los comandos nativos de unix, intenta unix2dos y convertir el archivo ya generado al formato de Windows y luego enviar el correo.

Si no estás usando los comandos de unix y prefieres hacerlo en java, usa `bw.write("\r\n") y si no complica su programa, tenga un método que descubra el sistema operativo y escriba la nueva línea apropiada.

2voto

rompetroll Puntos 2163

Si te entiendo bien, hablamos de un archivo adjunto de texto. Eso es desafortunado porque si fuera el cuerpo del mensaje del correo electrónico, siempre podrías usar " \r\n ", refiriéndose a http://www.faqs.org/rfcs/rfc822.html

Pero como es un apego, debes vivir con las diferencias del sistema. Si yo estuviera en tu lugar, elegiría una de esas opciones:

a) sólo apoyar a los clientes de Windows mediante el uso de " \r\n " como final de la línea.

b) proporcionar dos archivos adjuntos, uno con formato linux y otro con formato Windows.

c) No sé si el archivo adjunto debe ser leído por personas o máquinas, pero si se trata de personas, consideraría adjuntar un archivo HTML en lugar de texto plano. más portátil y mucho más bonito, también :)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X