`
Dead_knight
  • 浏览: 1201011 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
752c8642-b795-3fe6-946e-a4e845bffdec
Spring Securi...
浏览量:240207
33caa84e-18a6-3036-a82b-6e2106a4de63
clojure专题
浏览量:48915
E17ca077-44df-3816-a3fe-471c43f6e1e5
WebLogic11g
浏览量:236876
社区版块
存档分类
最新评论

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

阅读更多
一、问题现象:
   下面的代码主要用于将业务数据输出至文件中供接口调用:
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:":");
分享到:
评论
10 楼 Bernard 2009-03-12  
目录写成 / 应该问题比较小吧。
换行无论用那种移植都有问题。
就算换行取 line.separator 。
已写完毕的文件从win移到unix,都会出问题,反之亦然。
这种东西就应该有一个很严格的规范,全世界都写死成一种,那该多好呀。
9 楼 opengloves 2009-01-04  
sdh5724 写道
其实, 这个问题不算严重, 最严重的是 File.fileSeparator  N多的程序员是直接用 “/”. "\\" 这个东西直接加起来。 在多平台下使用的, 要命!

line.separator和path.separator的问题是肯定的
只用"/"会有问题么?
问题是win下盘符的问题,比如程序在d盘,却想把日志写c盘
这个靠File.fileSeparator是无法解决的吧?
8 楼 mikeandmore 2009-01-04  
RyanPoy 写道
我直接用'\n', 迄今,在win下和linux下读写都没有出现问题。

windows下如果fopen的模式有text/binary模式之分,自动将\n转换为\r\n。。。
unix则没有,r和rb是一样的。
7 楼 RyanPoy 2009-01-04  
我直接用'\n', 迄今,在win下和linux下读写都没有出现问题。
6 楼 gilly20 2008-12-09  
我以前也碰到过类似的问题.
5 楼 Dead_knight 2008-12-09  
ray_linn 写道

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

是的,笔误了,谢谢纠正,主要是说明系统参数不同引起这个问题的
4 楼 ray_linn 2008-12-09  
\n\r, 我服了你了windows是 \r\n,先回车后换行!!


如果不知道回车和换行是什么意思,去用用打字机。
3 楼 zhajie 2008-12-09  
sdh5724 写道
其实, 这个问题不算严重, 最严重的是 File.fileSeparator  N多的程序员是直接用 “/”. "\\" 这个东西直接加起来。 在多平台下使用的, 要命!


如果这些程序员出现在阿里,那真是。。。
2 楼 fjlyxx 2008-12-09  
最大的问题是 文件传输中如果是按行读取 按行写文件的时候。line.separator(windows:"\n\r";unix:"\n"); 比如WINDOWS到UNIX中就会有这样的问题了

如果校验是通过MD5混淆的话就应该注意了
1 楼 sdh5724 2008-12-08  
其实, 这个问题不算严重, 最严重的是 File.fileSeparator  N多的程序员是直接用 “/”. "\\" 这个东西直接加起来。 在多平台下使用的, 要命!

相关推荐

    php去除字符串换行符示例分享

    使用`PHP_EOL`可以避免硬编码特定系统的换行符,提高代码的可移植性和可维护性。 示例代码: ```php $str = str_replace(PHP_EOL, '', $str); ?> ``` 这段代码用`PHP_EOL`替换字符串中的换行符,无论在哪个操作...

    php中的PHP_EOL换行符详细解析

    在编写跨平台的PHP代码时,使用`PHP_EOL`而不是硬编码特定的换行符(如`\n`或`\r\n`),可以确保你的代码在不同操作系统之间保持一致的行为。这在处理文件读写、日志记录或者打印多行文本等场景时特别有用,因为这样...

    浅析Ruby的源代码布局及其编程风格

    使用 UTF-8 作为源文件编码。  每个缩进级别使用两个 spaces... 使用 Unix-风格 换行符。(*BSD/Solaris/Linux/OSX 用户被为默认涵盖,Windows 用户必须特别小心.) \n是换行,英文是LineFeed,ASCII码是0xA。 \r是回

    ftp一句话下载payload(第四十课).docx

    在ASCII模式下,FTP服务器会自动处理文本文件中的换行符,将其转换为特定的操作系统格式(例如,Unix系统使用`\n`作为换行符,而Windows系统则使用`\r\n`)。这种模式不适合传输非文本文件,因为可能导致文件损坏。 ...

    C# 字符串多行显示/文本换行以textbox为例讲解

    总的来说,要在C#中实现字符串的多行显示和文本换行,关键在于设置TextBox的`Multiline`属性为`true`,以及使用`System.Environment.NewLine`作为跨平台的换行符。同时,通过合理的字符串拼接和条件判断,可以实现...

    2021-2022计算机二级等级考试试题及答案No.18624.docx

    23. BufferedWriter操作:BufferedWriter的newLine()方法用于写入一个换行符。 24. 关系运算:在关系数据库中,R×S表示R和S的笛卡尔积,而不是交集、并集或除法操作。 25. 可执行程序:计算机能直接执行的是机器...

    android客户端_PC服务端

    在这里,用户输入的文字(`EditText`中的内容)被添加了一个换行符`\r\n`,然后通过`println`方法发送到服务器。 虽然这段代码没有显示服务器接收和响应的代码,但通常服务器端会有一个类似的逻辑,监听指定的端口...

    C语言配置文件读写.zip

    // 移除末尾换行符 i++; } } } fclose(fp); // 打印读取的配置项 for (int j = 0; j ; j++) { printf("%s = %s\n", config[j].key, config[j].value); } return 0; } ``` 对于配置文件的写入,我们...

    C#编程和Visual Studio使用技巧(上)

    在编写跨平台的代码时,使用`Environment.NewLine`替代硬编码的换行符(如`\n`或`\r\n`),可以确保在不同操作系统上的输出正确。 2. **命名空间别名**: 长的命名空间可能导致代码可读性降低,这时可以使用`using`...

    linux基础总结

    - `paste -d '+' a b`: 使用指定的字符(如`+`)作为分隔符。 - `paste -s a`: 将多行数据合并成一行,使用制表符分隔。 5. **文件搜索与信息提取** - `locate 字符串`: 快速搜索文件系统中的文件。 - `wc -l ...

    如何在textarea文本输入区内实现换行

    这是因为HTML会把它们当作普通的文本显示出来,而不是作为换行符处理。 要实现在`<textarea>`中显示换行,可以使用以下几种方法: 1. **HTML实体**:在HTML中,我们可以使用HTML实体来表示特殊字符。对于换行,...

    rar压缩软件.rar

    含文件掩码和以反斜线结尾,即使没有指定 -r 开关,目录和子目录的 所有内容都会被添加到压缩文件中。 下面的命令会把 Bitmaps 目录和它的子目录中的所有文件添加到 RAR 压缩文件 Pictures.rar 中: rar a ...

    在 Android 上通过模拟 HTTP multipart/form-data 请求协议信息实现图片上传

    这种格式的数据由一系列的部分组成,每个部分之间用分隔符(通常是两个换行符--)区分,并且每个部分都有一个Content-Type头来标识其类型。对于图片上传,我们通常会有一个"image/jpeg"或"image/png"的Content-Type...

    2019051420运维常用linux命令.pdf

    - **示例**: `tail -n 10 myfile.txt` 显示`myfile.txt`的最后10行。 - **实时监控日志文件**: `tail -f 日志文件` - **示例**: `tail -f /var/log/messages` 实时监控系统日志文件。 **9. 文件类型检查** - **...

    linux命令大全

    - `−0` 或 `−−null`:接受NUL字符作为输入行的结束符。 - `−a` 或 `−−reset-access-time`:重置文件访问时间。 - `−A` 或 `−−append`:将文件追加到现有的备份文件中,该备份文件必须位于磁盘上。 - `−b` ...

    java导出csv方法实现讲解

    // 添加逗号分隔,最后一列添加换行符 if (i != (Column.length - 1)) { sb.append(fieldValue + ","); } else { sb.append(fieldValue + "\r\n"); } break; } } } } catch (Exception e) { e....

    很实用的Linux 系统运维常用命令及常识(超实用)

    - `dos2unix`/`unix2dos`:转换文本文件的换行符,适应不同操作系统。 - `iconv`:转换文件编码,例如从GBK转为UTF-8。 2. **文件操作**: - `md5sum`:计算文件的MD5校验值,用于验证文件完整性。 - `ln`:...

Global site tag (gtag.js) - Google Analytics