java - 文件写入器正在写入不带 "Line breaks"的字符串

标签 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);
}


}}

最佳答案

\r 是回车符,\n 是新行,但作为一般规则,您必须查看文件的编码类型,因为新行字符可能因一种编码而异。

CR 、LF 和 CRLF 都是常用的行尾字符。在 PC 领域,CRLF 在 Windows 应用程序中很常见,CR 在 Classic Mac OS 上很常见。 ,而 LF 在现代很常见 macOS和面向 Unix 的操作系统( BSDLinux 等)。请参阅Wikipedia .

更多信息

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

关于java - 文件写入器正在写入不带 "Line breaks"的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56311937/

相关文章:

java - 调用类的不同实现

java - 如何在 Android/Java 中为视频添加水印

java - Java 中的多线程生成了 2 个线程

java - 使用 XMPP、Spark 或 SparkWeb java 的 Facebook 聊天应用程序

java - 将 3 个 JSP 字段连接成日期格式

java - Yfiles 图表从 flash 迁移到 html5?

java - 如何将多个字符串传递给另一个 Activity ?

java - 我的 Android 应用程序 "stops unexpectedly"

java - 如何比较已转换为整数的字符串的值(大于/小于)?

Java -> MySQL 查询问题