Have a look at this example:
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
System.out.println("hi there!");
System.out.close();
System.out.println("I'm silently swallowed :(");
System.out.flush(); // even flushing and closing again
System.out.close(); // doesn't throw an Exception
try {
FileOutputStream fos = new FileOutputStream(FileDescriptor.out);
fos.flush(); // same goes for this more direct approach
fos.close();
} catch (IOException e) {
e.printStackTrace(System.err);
}
}
}
Why doesn't the JVM tell me somehow, that writing to stdout failed? I would expect to get an Exception somewhere.
How else could I detect such a situation?
Official specification says it all.
Unlike other output streams, a
PrintStreamnever throws anIOException; instead, exceptional situations merely set an internal flag that can be tested via thecheckErrormethod.
If your question is "why did they decide to do it this way", then all we can do is make educated guesses, but opinions are off-topic on this site.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With