Windows和Linux的文件分隔符、换行符问题
一般来说,大部分java开发是在Windows上开发,而生产环境下在Linux中运行
文件分隔符
-
Windows文件分隔符默认为"\",由于是转义符,通常开发中写为"\\",注意,Windows也可以识别"/"分隔符
-
Linux文件分隔符默认为"/",且只能识别这种
所以,在日常开发中文件分隔符建议写为"/",推荐使用File.separator或者File.separatorChar
换行符
CR回车 LF换行
- Windows/Dos CRLF \r\n
- Linux/Unix LF \n
- MacOS CR \r
java开发
Linux只能识别\n换行符,\r会被当做一个字符,而Windows下默认换行符为\r\n,但\n也可以。
所以当使用Java输出数据到文件中时推荐使用\n
shell开发
使用Notepad++编辑sh文件,如下图
Notepad++显示换行符:视图 --> 显示符号 --> 显示行尾符
将脚本上传到Linux环境中执行,将会报如下错误
解决方法1:
在Notepad++操作:编辑 --> 文档格式转换 --> 转为UNIX格式
此时换行符会变为LF,上传Linux环境执行成功
解决方法2:
在Linux环境中使用vi打开:
- 输入set ff命令显示fileformat=dos
- 输入set ff=unix命令确认,再输入set ff命令显示fileformat=unix
- 输入wq保存退出
此时执行脚本成功
解决方法3:
在Linux环境中执行:sed -i ‘s/\r$//’ test.sh (相当于将\r全部替换掉)
idea开发
idea设置默认文件换行符
git版本控制
使用git做版本控制时注意,默认情况下,无论本地文件换行符是什么,在git服务器中存储都是LF,但是检出时都会变成CRLF
解决方法
打开git bash,设置core.autocrlf和core.safecrlf,建议设置autocrlf为input,safecrlf为warn。
下面为参数说明,–global表示全局设置
autocrlf
提交时转换为LF,检出时转换为CRLF(默认)
git config --global core.autocrlf true
提交时转换为LF,检出时不转换(推荐)
git config --global core.autocrlf input
提交检出均不转换
git config --global core.autocrlf false
safecrlf
拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
允许提交包含混合换行符的文件(默认)
git config --global core.safecrlf false
提交包含混合换行符的文件时给出警告(推荐)
git config --global core.safecrlf warn
注意:以上设置只针对个人电脑上的git环境,需要每个开发人员都统一设置