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

有没有人在将换行符写下在Windows机器上之前将其转换?

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

最佳答案

"\r\n"写入文件,即使在* nix上,也会向该文件输出"\r\n",而不是"\n"。这是一个使用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示例
写入test.txt
完成


证明它将\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 |正在测试1 2 3..M |
00000010 6f 72 65 20 54 65 73 74 69 6e 67 0d 0a | ore Testing .. |
0000001d

关于java - Java-将Unix换行符转换为回车符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37270015/

10-09 12:56