文件编写器正在编写没有“换行符”的字符串

时间:2019-05-26 08:34:34

标签: java

这是一个简单的“文件编写程序”,它从给定目录中扫描文本文件,并将其内容存储到初始化为“ words”的字符串中。现在,将内容串联到字符串中。保留空格和换行符。但是,当我尝试将字符串文字写入文件时。保留了空格,但换行符丢失了。 例如: 原始字串: 你好。我被困在UMT中。 带我离开这里。 文件写入: 您好,我被困在UMT中。带我离开这里。 请注意,新行未保留?没有换行吗?没有“ \ n”吗?

package testing;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Reader{ {

String words="this is a a new file created by me :D \n";
File file = new File("C:/file.txt");

  try {        
        Scanner scan= new Scanner(file);
        while(scan.hasNextLine()){
        words= words.concat(scan.nextLine() + "\r ");
        } 

    } catch (FileNotFoundException ex) {
        Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, 
ex);
    }

System.out.println(words);

try {
    FileWriter writer = new FileWriter("D:/newfile.txt");
    writer.write(words);
    writer.close();
} catch (IOException ex) {
    Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex);
}


}}

2 个答案:

答案 0 :(得分:1)

\ r是回车符,\ n是换行符,但是一般来说,您必须查看文件的编码类型,因为换行符可能会有所不同。

CR,LF和CRLF都是常用的行尾字符。在PC领域,CRLF在Windows应用程序中很常见,CR在{​​{3}}中很常见,LF在现代Classic Mac OS和面向Unix的操作系统(macOS,{{ 3}}等)。参见BSD

更多信息

如果您遇到其中一些问题,则必须记住,不同的charecter编码对于新行可能具有不同的表示法。例如,Word可能使用UTF-8,而记事本可能使用ISO-8859-1,并且您的默认系统设置为另一种编码类型,并且不确定每种编码都共享相同的换行符。当您使用\ n字符时,您正在输入系统的新行,因此,假设您正在Windows上工作,这可以显示您可以在Word中看到的新行,但是如果要在Mac文本编辑器中打开同一文件如果使用不同的字符编码,则看不到新行。

答案 1 :(得分:0)

尝试:

words= words.concat(scan.nextLine() + "\r\n" );

nextLine()扫描每一行而没有换行符。因此,您必须手动插入一个。 另外,在Linux和MacOS计算机上,下一行是\n,但在大多数Windows计算机上,下一行是\r\n