Strings written to file do not preserve line breaks

后端 未结 5 1663
执笔经年
执笔经年 2020-11-28 13:27

I am trying to write a String(lengthy but wrapped), which is from JTextArea. When the string printed to console, formatting is same as it was in

相关标签:
5条回答
  • 2020-11-28 13:59

    I just ran your program, and adding a carriage return (\r) before your newline (\n) did the trick for me.

    If you want to get a system independent line separator, one can be found in the system 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.";
    
    0 讨论(0)
  • 2020-11-28 14:06

    Please see the following question on how to appropriately handle newlines.

    How do I get a platform-dependent new line character?

    Basically you want to use

    String newLineChar = System.getProperty("line.separator");
    

    and then use the newLineChar instead of "\n"

    0 讨论(0)
  • 2020-11-28 14:14

    Text from a JTextArea will have \n characters for newlines, regardless of the platform it is running on. You will want to replace those characters with the platform-specific newline as you write it to the file (for Windows, this is \r\n, as others have mentioned).

    I think the best way to do that is to wrap the text into a BufferedReader, which can be used to iterate over the lines, and then use a PrintWriter to write each line out to a file using the platform-specific newline. There is a shorter solution involving string.replace(...) (see comment by Unbeli), but it is slower and requires more memory.

    Here is my solution - now made even simpler thanks to new features in 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));
        }
    }
    
    0 讨论(0)
  • 2020-11-28 14:19

    If you are using a BufferedWriter, you could also use the .newline() method to re-add the newline based on your platform.

    See this related question: Strings written to file do not preserve line breaks

    0 讨论(0)
  • 2020-11-28 14:20

    If you wish to keep the carriage return characters from a Java string into a file. Just replace each break line character (which is recognized in java as: \n) as per the following statement:

    TempHtml = TempHtml.replaceAll("\n", "\r\n");

    Here is an code example,

            // 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);
    
    0 讨论(0)
提交回复
热议问题