最近项目中需要导出文件,其实导出文件是一个挺简单的事情。但是却遇到了很奇怪的问题。
首先导出到文件需要用到 BufferedWriter。而换行则是通过 bw.newline() 方法,问题将出在 newline() 方法上面。
我们看一下 newline() api:
1 /** 2 * Writes a line separator. The line separator string is defined by the 3 * system property <tt>line.separator</tt>, and is not necessarily a single 4 * newline (' ') character. 5 * 6 * @exception IOException If an I/O error occurs 7 */ 8 public void newLine() throws IOException { 9 write(lineSeparator); 10 }
不同系统的换行符:
windows -->
linux ux -->
mac -->
【 是回车,return
是换行,newline】
我们一般开发是在 windows 下开发,而服务器一般情况下都是 linux。
如果我们使用 newline 函数换行,在本机测试的时候,因为是 windows 环境,换行符是 ,打开文件时候自然文件是换行处理,没有问题。
当我们部署到服务器时候,服务器是 linux 环境,newline 读取系统换行符是 ,导出到文件,文件的换行符是 ,当我们把这个文件通过浏览器下载到 windows 时候,再打开文件将会出现没有换行的问题。因为 windows 下对于 的解释并不是换行符。
所以,我们在不同系统开发时候,如果需要指定文件在某些地方换行,则不能使用 newline 方法。
必须手动指定换行符:
因为在三个系统中,查看该文件, 都会解释为换行。
以上。