如何强制Java只写换行符?我正在获得 的 CRLF



[已解决]

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

[/已解决]

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

我只需要用一个 LF 结束每一行,据我所知,它应该是""。我仍然为每一行都得到 CRLF(就好像我在写"\r"一样)。

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

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_1nStr_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平台上使用Eclipse和Java6(强制)。

是否有任何设置可能会搞砸这个?还是我错过了什么?

您的程序是正确的。要进行测试,请在创建文件后添加此代码片段,即在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

不敢相信,这段代码会生成一个带有 \r 的文件!

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

也许您在创建后使用编辑器打开了文件,并且编辑器写回了\r?

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

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

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

System.getProperty("line.separator")

或者这个:

String.format("%n")

希望对你有帮助

最新更新