Mike
Mike

Reputation: 2339

getting a "^M" after each line in unix from a java created file

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

Answers (5)

Colselaw
Colselaw

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

srkavin
srkavin

Reputation: 1180

You may want to try running the file through dos2unix utility in *nix, it will get rid of ^M

Upvotes: 1

Ted Hopp
Ted Hopp

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

Jonathan M
Jonathan M

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

StrangeWill
StrangeWill

Reputation: 2136

*nix uses \n for newline, Windows uses \r\n and produces that ^M character in vi and the like.

Upvotes: 1

Related Questions