Reputation: 2339
I have a Java program that creates a file and prints a bunch of data using this statement:
out.write(data+"|"+data2+"\r\n");
When I view this file in vim in Unix I see a ^M after each line. What is it? What is causing this? How can I get rid of it?
Upvotes: 5
Views: 5123
Reputation: 1079
You'll generally only see those if the first line was a unix line ending (lf) but it also includes DOS line endings. To remove them (and correct the file), load it again using :e ++ff=dos, then :set ff=unix, then write it.
Within the Java code, if you're writing text data instead of binary, use a PrintStream and use print() and println() which adds the correct line ending for your system.
Upvotes: 0
Reputation: 1180
You may want to try running the file through dos2unix
utility in *nix, it will get rid of ^M
Upvotes: 1
Reputation: 234847
You need to use the platform-specific line separator string instead of \r\n
when constructing your output string. That can be obtained by System.getProperty("line.separator");
.
Upvotes: 8
Reputation: 17451
^M is character 13 (decimal) which is the carriage return (in your code it's \r
). Notice that M is the 13th letter of the alphabet.
You can get rid of it by not including \r
in your code. This will work fine if you're on a unix platform. On windows, the file will look funny unless you're viewing it in something like Wordpad.
Upvotes: 4
Reputation: 2136
*nix uses \n for newline, Windows uses \r\n and produces that ^M character in vi and the like.
Upvotes: 1