Beware Platform-Dependent File Code
Problem
Chastened by the previous recipe, you now wish to write only platform-independent code.
Solution
Use readLine( )
and println( ).
Never use \n by itself; use
File.separator if you must.
Discussion
As mentioned in Section 9.10, if you just use
readLine( ) and println( ), you
won’t have to think about the line endings. But a particular
problem, especially for recycled C programmers and their relatives,
is using the \n character in text strings to mean
a newline. What is particularly distressing about this code is that
it will work -- sometimes -- usually on the developer’s
own platform. But it will surely someday fail, on some other system.
// BadNewline.java
String myName;
public static void main(String argv[]) {
BadNewline jack = new BadNewline("Jack Adolphus Schmidt, III");
System.out.println(jack);
}
/**
* DON'T DO THIS. THIS IS BAD CODE.
*/
public String toString( ) {
return "BadNewlineDemo@" + hashCode( ) + "\n" + myName;
}
// The obvious Constructor is not shown for brevity; it's in the codeThe real problem is not that it will fail on some platforms, though.
What’s really wrong is that it mixes formatting and
input/output, or tries to. Don’t mix line-based display with
toString( ): avoid “multiline strings”
output from toString( ) or any other
string-returning method. If you need to write
multiple
strings, then say what you mean:
// GoodNewline.java String myName; public static void main(String argv[]) { GoodNewline jack = new GoodNewline("Jack ...