【问题标题】:File writer is writing the string with no "Line breaks"文件编写器正在写入没有“换行符”的字符串
【发布时间】:2019-05-26 08:34:33
【问题描述】:

它是一个简单的“文件写入程序”,它从给定目录扫描文本文件并将其内容存储到初始化为“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);
}


}}

【问题讨论】:

  • nextLine() 不包括换行符,\r 不是一,\n 是一。您正在不间断地阅读和不间断地写作。

标签: java


【解决方案1】:

\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 文本编辑器上打开相同的文件如果它们使用不同的字符编码,则看不到新行。

【讨论】:

  • 这两个文件都是 txd。字符串 "words" 能够存储 txt 文件中的文本并保留所有内容。但是,当我将字符串写入新的 txd 文件(记事本:Windows)时。空格被保留,但换行符丢失。这些行只在结尾句子之后开始,永远不会进入新行。
  • JFYI System.lineSeparator() 为当前系统提供正确的分隔符。
  • 非常感谢。我还发现 \r\n 也有效。谢谢大佬
  • 欢迎您,刚刚编辑了我的答案以获取更多信息
【解决方案2】:

试试:

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

nextLine() 在没有换行符的情况下扫描每一行。所以你必须手动插入一个。 此外,在 Linux 和 MacOS 机器上,下一行是 \n,但在大多数 Windows 机器上,下一行是 \r\n

【讨论】:

  • @LegoGames 不要这样做,它会让你的程序只能在 Windows 上运行。从输入中创建一个行列表,然后使用println,或者执行words = words.concat(String.format ("%s%n", scan.nextLine()))之类的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 2010-11-11
  • 2021-10-28
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
相关资源
最近更新 更多