Java - 将 unix 换行符转换为回车 return

Java - convert unix linefeed to carriage return

我在 unix 服务器上构建一个字符串,然后将其写在 windows 机器上。为了换行,我使用“\r\n”,但随后服务器只添加了 unix 换行符“\n”。关键是 eol 是十六进制的 0a,我需要 0d0a 用于其他程序。

有没有人想过在将换行符写到 windows 机器之前转换换行符?

要将字符串转换为十六进制然后将所有 0a 替换为 0d0a 并将其转换回字符串并不是最佳做法。有没有更好的解决方案?

"\r\n" 写入文件将输出 "\r\n",而不是 "\n",即使在 *nix 上也是如此。这是一个使用 BufferedWriter 的示例,因为您曾说过您正在使用一个:

import java.io.*;

public class Example {
    public static final void main(String[] args) {
        System.out.println("Writing to test.txt");
        try (
            Writer w = new FileWriter("test.txt");
            BufferedWriter bw = new BufferedWriter(w);
        ) {
            bw.append("Testing 1 2 3");
            bw.append("\r\n");
            bw.append("More Testing");
            bw.append("\r\n");
        }
        catch (IOException ioe) {
            System.err.println("Error writing to file: " + ioe.getMessage());
        }
        System.out.println("Done");
    }
}

运行它:

$ java Example
Writing to test.txt
Done

证明它向输出写入 \r\n(不仅仅是 \n)(是的,我使用的是 *nix,特别是 Linux Mint 17.3):

$ hexdump -C test.txt
00000000  54 65 73 74 69 6e 67 20  31 20 32 20 33 0d 0a 4d  |Testing 1 2 3..M|
00000010  6f 72 65 20 54 65 73 74  69 6e 67 0d 0a           |ore Testing..|
0000001d

如果您真的想更改整个应用程序的默认值,请在启动时重新定义 line.separator 系统 属性(使用 -D 参数)。但它是相当重量级的解决方案,为您需要的特定报告显式编写换行符可能更容易,而将所有其余部分(如本机日志文件或其他)留给 unix newlins。