我有一个软件可以创建一个文件,我发送给读取文件的银行软件。
但是这个软件拒绝我的文件,因为它说我的文件没有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);
}
}
答案 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