Java Print Streams - Line Breaks
(Page 3 of 5 )
As previously mentioned, the println() method always adds a line break at the end of each line it prints. You can even call println() with no arguments to print just a line break:
public void println()
The line break character varies from platform to platform. In particular:
- On Unix (including Mac OS X), it’s a linefeed,\n, ASCII 10.
- On Mac OS 9, it’s a carriage return,\r, ASCII 13.
- On Windows, it’s a carriage return linefeed pair,\r\n, ASCII 13 followed by ASCII 10.
This is almost never what you actually want!
Most file formats and most network protocols care a great deal about which line break character is written.* For instance, if you’re writing a web client or server, the HTTP specification requires that header lines end with carriage return linefeed pairs. It doesn’t matter whether the client or server is a Mac, a PC, a Unix workstation, or a Palm Pilot. It must use\r\nas the line break. You can specify this by explicitly passing the line break you want to theprint()method rather than callingprintln(). For example:
for (int i = 0; i <= 127; i++) {
out.print(i);
out.print("\r\n");
}
In practice, most HTTP servers and clients accept requests that use the wrong line breaks. However, some aren’t so forgiving, and you really shouldn’t count on this behavior.
If for some reason you want to know which line break character will be used, theline.separatorsystem property will tell you:
String lineBreak = System.getProperty("line.separator");
Not all line breaks are created equal. If thePrintStream is set toautoFlush—that is, if the second argument to the constructor istrue—after every call toprintln()and after every linefeed that’s printed, the underlying stream will be flushed. Thus,out.println()andout.print("\n")both flush the stream. So doesout.print("\r\n"), because it contains a linefeed. However,out.print("\r")does not cause an automatic flush.
Next: Error Handling >>
More Java Articles
More By O'Reilly Media
|
This article is excerpted from chapter seven of Java I/O, Second Edition, written by Elliotte Rusty Harold (O'Reilly, 2006; ISBN: 0596527500). Check it out today at your favorite bookstore. Buy this book now.
|
|