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

时间:2016-05-17 07:41:14

标签: java unix hex carriage-return linefeed

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

有没有人想过在将它写在Windows机器上之前转换换行符?

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

2 个答案:

答案 0 :(得分:4)

"\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

答案 1 :(得分:0)

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