我在unix服务器上构建一个字符串,然后将其写在windows maschine上。要制作换行符,我使用“\ r \ n”,但服务器只添加unix换行符“\ n”。关键是eol是十六进制 0a ,我需要 0d0a 用于其他程序。
有没有人想过在将它写在Windows机器上之前转换换行符?
要将字符串转换为十六进制,然后将所有0a替换为0d0a,将其转换回字符串不是最佳做法。有没有人有更好的解决方案?
答案 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。