Доброго времени суток, вопрос на самом деле очень простой: "Зачем?". Зачем её писать? В частности метод writeMessage(). К readString() readInt() претензий нет. Которую задачу меня насильно заставляют его вызывать. Для себя определил такие варианты: 1) Его поведение (метода) можно будет легко изменить. Инкапсуляция, все дела. Только для чего менять поведения вывода в консоль я так и не понял. 2) Из-за того, что я теоретически могу переопределить System.out. Но это тоже притянуто за уши. Всё. Я написал однострочный метод, который делает то же, что и sout, только его дольше вызывать (sout я напишу банально быстрее). Попутно породив новую сущность, которую нужно держать в голове. Собственно виновник торжества:
public class ConsoleHelper {
    private static BufferedReader bis = new BufferedReader(new InputStreamReader(System.in));
    public static void writeMessage(String message) {
        System.out.println(message);
    }
    public static String readString() throws IOException {
        return bis.readLine();
    }
    public static int readInt() throws IOException {
        String text = readString();
        return Integer.parseInt(text.trim());
    }
}
UPD: Этот же "гениальный" метод мы вызываем в блоке catch. Т.е. выводим сообщение в stdout, а не в stderr ... Это вообще законно:)