Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I normalize the EOL character in Java?

I have a linux server and many clients with many operating systems. The server takes an input file from clients. Linux has end of line char LF, while Mac has end of line char CR, and Windows has end of line char CR+LF

The server needs as end of line char LF. Using java, I want to ensure that the file will always use the linux eol char LF. How can I achieve it?

like image 973
bilal Avatar asked Sep 23 '10 09:09

bilal


2 Answers

Could you try this?

content.replaceAll("\\r\\n?", "\n") 
like image 197
eumiro Avatar answered Sep 29 '22 02:09

eumiro


Combining the two answers (by Visage & eumiro):

EDIT: After reading the comment. line. System.getProperty("line.separator") has no use then.
Before sending the file to server, open it replace all the EOLs and writeback
Make sure to use DataStreams to do so, and write in binary

String fileString; //.. //read from the file //.. //for windows fileString = fileString.replaceAll("\\r\\n", "\n"); fileString = fileString.replaceAll("\\r", "\n"); //.. //write to file in binary mode.. something like: DataOutputStream os = new DataOutputStream(new FileOutputStream("fname.txt")); os.write(fileString.getBytes()); //.. //send file //.. 

The replaceAll method has two arguments, the first one is the string to replace and the second one is the replacement. But, the first one is treated as a regular expression, so, '\' is interpreted that way. So:

"\\r\\n" is converted to "\r\n" by Regex "\r\n" is converted to CR+LF by Java 
like image 28
lalli Avatar answered Sep 29 '22 02:09

lalli