为什么这个简单的程序在 Java 和 AIX 中执行时会导致不同的回车/换行文件?
如果我在 Windows 7 上运行这个简单的程序,然后在 AIX(Unix 系统)上运行这个简单的程序,并使用 Winmerge 或 Compare It 等工具比较两个生成的文件,它会告诉我回车符和换行符不同,但内容相同。
-
这是为什么呢?在这种情况下,如果两者都使用相同的编码“UTF-8”,那么不应该是相同的吗?
-
如何使两个文件完全相等?
public class WriteFile {
public static void main(String[] args) throws IOException {
write();
}
public static void write() throws IOException {
File file = new File("/tmp/test.txt");
file.delete();
file.createNewFile();
String str = "hello";
FileOutputStream fileOs = new FileOutputStream(file);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(fileOs, "UTF-8"), true);
writer.println(str);
writer.close();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不同的操作系统使用不同的换行符约定:
CR+LF
;LF
。(如果您好奇,还有更多。)。
如果您需要输出文件相同,请不要使用
println()
,而应编写\n
或\r\n
:Different operating systems use different newline conventions:
CR+LF
;LF
.(If you're curious, there's more.).
If you need the output files to be identical, don't use
println()
, but write\n
or\r\n
instead:使用
而不是
Use
instead of
正如所说,您应该从使用 println(String) 到 打印(字符串)< /a> 或 printf(String, ...)
查看 println(String) (强调我的):
以及 println() 的文档:
您可以阅读有关
line.separator
系统属性 在这里。我会同意 aix 的使用建议
Like it's been said, you should switch from using println(String) to print(String) or printf(String, ...)
Check out the documentation for println(String) (emphasis mine):
And the docs for println():
You can read about the
line.separator
system property here.I would go with aix's suggestion of using