Estoy tratando de escribir un String(muy largo, pero ajustado), que es de JTextArea. Cuando la cadena impreso en la consola, el formato es el mismo como lo fue en Text Area, pero cuando escribo para presentar BufferedWriter, es una escritura que String en una sola línea.

Siguiente fragmento de código se puede reproducir:

public class BufferedWriterTest {
    public static void main(String[] args) throws IOException {
        String string = "This is lengthy string that contains many words. So\nI am wrapping it.";
        System.out.println(string);
        File file = new File("C:/Users/User/Desktop/text.txt");
        FileWriter fileWriter = new FileWriter(file);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        bufferedWriter.write(string);
        bufferedWriter.close();
    }
}

Lo que salió mal? Cómo resolver esto? Gracias por la ayuda!

  • eran del tamaño de la consola y el tamaño de su JTeaxtArea la misma?
  • si no, entonces probablemente es porque usted necesita \r\n para windows nueva línea
  • Eclipse de la Consola y JTextArea es 750×400 px. Si tengo que agregar \r\n, ¿qué tengo que hacer para la entrada de JTextArea? Es posible identificar a los saltos de línea?
InformationsquelleAutor Ahamed | 2012-02-08

5 Comentarios

  1. 18

    Texto de un JTextArea tendrá \n caracteres de salto de línea, independientemente de la plataforma que se está ejecutando. Se desea reemplazar los caracteres con la específica de la plataforma de salto de línea como se escribe en el archivo (para Windows, este es \r\n, como otros han mencionado).

    Creo que la mejor manera de hacer esto es para ajustar el texto en una BufferedReader, que puede ser utilizado para iterar a través de las líneas y, a continuación, utilizar un PrintWriter a escribir cada línea a un archivo con el específico de la plataforma de salto de línea. Hay un corto solución con string.replace(...) (véase el comentario por Unbeli), pero es más lento y requiere más memoria.

    Aquí está mi solución – ahora se hace aún más sencillo gracias a las nuevas características de Java 8:

    public static void main(String[] args) throws IOException {
        String string = "This is lengthy string that contains many words. So\nI am wrapping it.";
        System.out.println(string);
        File file = new File("C:/Users/User/Desktop/text.txt");
    
        writeToFile(string, file);
    }
    
    private static void writeToFile(String string, File file) throws IOException {
        try (
            BufferedReader reader = new BufferedReader(new StringReader(string));
            PrintWriter writer = new PrintWriter(new FileWriter(file));
        ) {
            reader.lines().forEach(line -> writer.println(line));
        }
    }
    • uhm, apilar todos estos lectores a hacer la sustitución simple? string.replace("\\n", System.getProperty("line.separator"));
    • El reemplazo es rápida si la Cadena es corta, por muy largas cadenas, el enfoque anterior se mantiene bien. Yo lo he probado, aunque.
    • requiere la creación de un nuevo objeto, que temporalmente se duplica el requisito de memoria, así que no es ideal para grandes cantidades de datos. Aunque se concede, con los datos procedentes de un JTextArea, no me puedo imaginar la cadena ser muy grandes, por lo que, probablemente, podría funcionar igual de bien para la mayor parte
  2. 3

    Me corrió de su programa, y la adición de un retorno de carro (\r) antes de su salto de línea (\n) hizo el truco para mí.

    Si usted desea conseguir un sistema independiente separador de línea, uno puede ser encontrado en el sistema propery line.separator

    String separator = System.getProperty("line.separator");
    String string = "This is lengthy string that contains many words. So" + separator
                + "I am wrapping it.";
    • Estoy recibiendo Cadena de JTextArea, tengo identificar manualmente los saltos de línea e insertar line.separator? Es que la única manera? 🙁
    • Puede haber mejores formas que, pero parece que la solución para usted.
  3. 0

    Si desea mantener los caracteres de retorno de carro de Java cadena en un archivo. Basta con sustituir cada salto de línea de caracteres (que es reconocida en java como: \n) según la siguiente declaración:

    TempHtml = TempHtml.replaceAll(«\n», «\r\n»);

    Aquí es un ejemplo de código,

            //When Execute button is pressed
            String TempHtml = textArea.getText();
            TempHtml = TempHtml.replaceAll("\n", "\r\n");
            try (PrintStream out = new PrintStream(new FileOutputStream("C:/Temp/temp.html"))) {
                out.print(TempHtml);
            } catch (FileNotFoundException e) {
                //TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(TempHtml);

Dejar respuesta

Please enter your comment!
Please enter your name here