论坛首页 Java企业应用论坛

不要硬编码'\n' 和 '\r'作为换行符

浏览 16119 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (2)
作者 正文
   发表时间:2008-12-08   最后修改:2008-12-09
OO
一、问题现象:
   下面的代码主要用于将业务数据输出至文件中供接口调用:
BufferedWriter out = null;
try
{
   out = new BufferedWriter(new FileWriter(localFilePath + fileName, isAddLog));
   ……
   ……
   if(isImepServerRunning)
   {
      out.write("004|" + hostName + "|" + ip + "|0002|imep进程up|0|" + performTime + “\r\n”);
   }
   else
   {
      out.write("004|" + hostName + "|" + ip + "|0002|imep进程down|1|" + performTime + “\r\n”);
   }
}
   ……
   此时出现了问题:结果文件中的数据换行在unix系统下不正确

二、解决方案:
1.由于unix和windows系统参数的差别,故不使用硬编码进行换行,通过使用System.getProperties("line.separator");获取换行符
2.通过使用out.newLine();实现

三、问题总结:
由该问题可延伸至操作系统常用参数的差别,如:
line.separator(windows:"\r\n";unix:"\n");
file.separator(windows:"\";unix:"/");
path.separator(windows:";";unix:":");
   发表时间:2008-12-08  
其实, 这个问题不算严重, 最严重的是 File.fileSeparator  N多的程序员是直接用 “/”. "\\" 这个东西直接加起来。 在多平台下使用的, 要命!
0 请登录后投票
   发表时间:2008-12-09  
最大的问题是 文件传输中如果是按行读取 按行写文件的时候。line.separator(windows:"\n\r";unix:"\n"); 比如WINDOWS到UNIX中就会有这样的问题了

如果校验是通过MD5混淆的话就应该注意了
0 请登录后投票
   发表时间:2008-12-09  
sdh5724 写道
其实, 这个问题不算严重, 最严重的是 File.fileSeparator  N多的程序员是直接用 “/”. "\\" 这个东西直接加起来。 在多平台下使用的, 要命!


如果这些程序员出现在阿里,那真是。。。
0 请登录后投票
   发表时间:2008-12-09   最后修改:2008-12-09
\n\r, 我服了你了windows是 \r\n,先回车后换行!!


如果不知道回车和换行是什么意思,去用用打字机。
0 请登录后投票
   发表时间:2008-12-09  
ray_linn 写道

\n\r, 我服了你了windows是 \r\n,先回车后换行!! 如果不知道回车和换行是什么意思,去用用打字机。

是的,笔误了,谢谢纠正,主要是说明系统参数不同引起这个问题的
0 请登录后投票
   发表时间:2008-12-09  
我以前也碰到过类似的问题.
0 请登录后投票
   发表时间:2009-01-04  
我直接用'\n', 迄今,在win下和linux下读写都没有出现问题。
0 请登录后投票
   发表时间:2009-01-04  
RyanPoy 写道
我直接用'\n', 迄今,在win下和linux下读写都没有出现问题。

windows下如果fopen的模式有text/binary模式之分,自动将\n转换为\r\n。。。
unix则没有,r和rb是一样的。
0 请登录后投票
   发表时间:2009-01-04  
sdh5724 写道
其实, 这个问题不算严重, 最严重的是 File.fileSeparator  N多的程序员是直接用 “/”. "\\" 这个东西直接加起来。 在多平台下使用的, 要命!

line.separator和path.separator的问题是肯定的
只用"/"会有问题么?
问题是win下盘符的问题,比如程序在d盘,却想把日志写c盘
这个靠File.fileSeparator是无法解决的吧?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics