Pregunta

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

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

Y estoy enviando ese archivo de texto mediante la fijación en el correo de sí mismo entorno Unix (automatizado que mediante comandos de Unix).

Mi problema es, después de descargar el archivo de texto de correo en un sistema Windows, si abierto ese archivo de texto los datos no está correctamente alineado. personaje es newline() no funciona, creo que sí.

Quiero misma alineación archivo de texto como en el entorno Unix, si abría la archivo de texto en el entorno de Windows también.

¿Cómo puedo solucionar el problema?

código Java abajo para su referencia (que se ejecuta en el 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();
}
¿Fue útil?

Solución

Java sólo se sabe acerca de la plataforma que se está ejecutando actualmente, por lo que sólo le puede dar una salida dependiente de la plataforma en esa plataforma (usando bw.newLine()). El hecho de que abrirlo en un medio del sistema de ventanas que o bien tiene que convertir el archivo antes de usarlo (el uso de algo que haya escrito, o usando un programa como unix2dos ), o que tienen que generar el archivo con retornos de carro en formato windows originalmente en el programa Java. Así que si usted sabe, siempre se abrirá el archivo en una máquina Windows, tendrá a la salida

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

Vale la pena señalar que no va a ser capaz de dar salida a un archivo que se ve bien en ambas plataformas si es sólo texto sin formato que está utilizando, es posible que desee considerar el uso de HTML si se trata de un correo electrónico, o xml si se trata de datos. Alternativamente, es posible que tenga algún tipo de cliente que lee los datos y luego formatea para la plataforma que el espectador está utilizando.

Otros consejos

El newLine() método asegura una nueva línea compatible con la plataforma se añade (0Dh 0Ah para DOS, 0Dh para Macs más antiguos, 0Ah para Unix / Linux). Java no tiene manera de saber de la plataforma que se va a enviar el texto. Esta conversión debe ser atendido por el envío de entidades electrónico.

No sé que mira a su archivo, pero si lo abre en WordPad en vez de Bloc de notas, los saltos de línea mostrará correcta. En caso de que esté utilizando una extensión de fichero especial, asociarlo con WordPad y que haya terminado con él. O utilizar cualquier otro editor de texto más avanzado.

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

Si está seguro de que va a ser abierto en ventanas, puede dar formato a las ventanas de nueva línea.

Si ya está utilizando comandos nativos de Unix, intente unix2dos y convertir teh archivo ya generada al formato de Windows y luego enviar el correo.

Si no está utilizando comandos UNIX y prefiere hacerlo en Java, el uso de `` bw.write ( "\ r \ n") `y si no complica su programa, tiene un método que se entera de la operación sistema y escribe la nueva línea adecuada.

Si he entendido bien, se habla de un archivo de texto adjunto. Eso es desafortunado porque si fuera el cuerpo del mensaje de correo electrónico, siempre se puede utilizar "\ r \ n", en referencia a http://www.faqs.org/rfcs/rfc822.html

Sin embargo, ya que es un archivo adjunto, debe vivir con las diferencias del sistema. Si yo estuviera en sus zapatos, yo elegiría una de esas opciones:

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

b) proporcionar dos archivos adjuntos, uno con formato de Linux y otra con formato Windows.

c) No sé si el archivo adjunto es para ser leído por personas o máquinas, pero si se trata de personas que consideraría adjuntando un archivo HTML en lugar de texto plano. más portátil y más bonita, demasiado:)

Encapsular su escritor para proporcionar reemplazo de carbón, así:

public class WindowsFileWriter extends Writer {

    private Writer writer;

    public WindowsFileWriter(File file) throws IOException {
        try {
            writer = new OutputStreamWriter(new FileOutputStream(file), "ISO-8859-15");
        } catch (UnsupportedEncodingException e) {
            writer = new FileWriter(logfile);
        }
    }

    @Override
    public void write(char[] cbuf, int off, int len) throws IOException {
        writer.write(new String(cbuf, off, len).replace("\n", "\r\n"));
    }

    @Override
    public void flush() throws IOException {
        writer.flush();
    }

    @Override
    public void close() throws IOException {
        writer.close();
    }

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top