如何强制 Java 只写换行符?我正在使用 \n 获取 CRLF

How to force Java to write newline only? I'm getting CRLF with \n

[已解决]

看来我的应用程序没有问题。按照建议逐个读取字符不会显示任何 CR。 错误可能出在接收端(独立于我的应用程序),无论出于何种原因,它都会添加一个 0x0D 字符。 这仍然是如何仅放置 \n 的一个很好的例子。

[/已解决]

我的应用程序有一个奇怪的行为:

我只需要在每一行结尾加上一个 LF,据我所知,它应该是“\n”。 我仍然为每一行获取 CRLF(就好像我在写“\r\n”)。

该应用程序非常复杂,所以我在这里粘贴了一个示例代码

private static final String STR1 = "Str_1";
private static final String STR2 = "Str_2";
private static final char NEW_LINE = (char)0x0A;
//private static final String NEW_LINE = "\n";

public static void main(String[] args) {

    //They all return CR+LF instead of LF only.
    System.out.println("Str_1\nStr_2");

    System.out.print(STR1+NEW_LINE+STR2);

    try{
        FileOutputStream fos = new FileOutputStream("tests\newline_test.txt");
        fos.write((STR1+NEW_LINE+STR2).getBytes()); //The case I'm mostly interested into
        fos.close();
    } catch (IOException e){
        e.printStackTrace();
    }
}

我在 Windows 平台(强制)上使用带 Java6(强制)的 Eclipse。

是否有任何设置可能会干扰此操作?还是我遗漏了什么?

如果您只打算使用 Windows,您可以使用 13 和 10 作为行分隔符。

os.write(10);
os.write(13);

如果您必须注意管理跨平台行分隔符,我会使用这个:

System.getProperty("line.separator")

或者这样:

String.format("%n")

希望对您有所帮助

简直不敢相信,这段代码生成的文件带有 \r\n!

创建后立即使用十六进制转储工具(例如,您可以使用 "Tiny Hexer")检查文件,然后再使用任何其他工具处理文件。

可能你创建后用编辑器打开了文件,编辑器回信了\r\n?

你的程序是正确的。要进行测试,请在文件创建后添加此代码片段,即在 fos.close()

之后
FileInputStream fis = new FileInputStream("tests\newline_test.txt");
int read = -1;
while((read = fis.read())!=-1){
    System.out.println(read);
}

fis.close();

输出应该是:

Str_1
Str_2
Str_1
Str_283
116
114
95
49
10
83
116
114
95
50

请注意,您只会得到 10,这是换行符。如果文件有 CR,那么输出也应该包含 13