如何正确编写CRLF以获得最大的可移植性?

时间:2014-06-27 11:38:00

标签: java

我有一个软件可以创建一个文件,我发送给读取文件的银行软件。 但是这个软件拒绝我的文件,因为它说我的文件没有CRLF作为行分隔符。 到目前为止,该文件仅在Windows机器上创建,对于行分隔符,我始终使用"\r\n"。 我搜索了它,发现如果我在Windows上执行它,它生成的方式与在linux或mac上生成的方式不同。 但是,我如何始终独立于平台生成CRLF

更新1

这是我用来创建文件的方法,我将所有\ r \ n替换为\ n,然后将\ n替换为\ r \ n,只是为了确保当调用此方法的人只传递\ n作为行分隔符时,使用\ r \ n:

正确生成文件
public static void createFile(String filePath,String content){
    try{
        File parentFile=new File(filePath).getParentFile();
        if(parentFile!=null && !parentFile.exists()){
            parentFile.mkdirs();
        }
        BufferedWriter bw=new BufferedWriter(new FileWriter(filePath));
        bw.write(content.replaceAll("\r\n","\n").replaceAll("\n","\r\n"));
        bw.flush();
        bw.close();
    }catch(Exception e){
        throw new RuntimeException("Error creating file", e);
    }
}

1 个答案:

答案 0 :(得分:2)

\r\n始终在所有平台上打印两个字符CR和LF。来自http://docs.oracle.com/javase/tutorial/java/data/characters.html

  

\ n此时在文本中插入换行符。
  \ r \ n此时在文本中插入回车符。

您可以使用

自行测试
   FileWriter fw = new FileWriter("test");
   fw.write("\r\n");
   fw.close();
   FileInputStream fis = new FileInputStream("test");
   for(int ch; (ch = fis.read())!=-1;) {
       System.out.printf("0x%02x%n", ch);
   }
   fis.close();

在Ubuntu机器上运行打印

0x0d
0x0a