CoreIO.java
package fi.jyu.mit;
import java.io.*;

/**
 * <p>Title: CoreIO </p>
 * <p>Description: Yksinkertainen IO-kirjasto joka osaa tulostaa ä:n
 * myös DOS-ikkunaan jos java käynnistetään komennolla
 * <pre>java -DOEM luokka</pre></p>
 * <p>Copyright: Copyright Vesa Lappalainen(c) 2002</p>
 * <p>Company: jyu</p>
 * @author Vesa Lappalainen
 * @version 1.0
 */

public class CoreIO {

  private static BufferedReader myIn = initMyIn();
  private static BufferedWriter myOut = initMyOut();
  private static final String OEM = "Cp437";

  private static boolean isWinConsole() {
    String osName = System.getProperty("os.name");
    String isOEM = System.getProperty("OEM");
    return ( osName != null && osName.startsWith("Windows") && isOEM != null );
  }

  private static BufferedReader initMyIn() {
    if ( isWinConsole() ) try {
       return new BufferedReader(new InputStreamReader(System.in,OEM));
    }
    catch ( UnsupportedEncodingException e)  { }
    return new BufferedReader(new InputStreamReader(System.in));
  }

  private static BufferedWriter initMyOut() {
    if ( isWinConsole() ) try {
      OutputStreamWriter out = new OutputStreamWriter(System.out, OEM);
      BufferedWriter bout = new BufferedWriter(out);
      return bout;
//      System.setOut(new PrintStream(bout));
    }
    catch ( UnsupportedEncodingException e)  { }
    return new BufferedWriter(new OutputStreamWriter(System.out));
  }


  /** Lukee yhden rivin syötön
   *  @param prompt Käyttäjälle tulostettava kysymys
   *  @return Käyttäjän syöttämä jono
   */
  public static String readln(String prompt) {
    print(prompt);
    try {
      String s = myIn.readLine();
      return s;
    }
    catch (IOException e) {
      return "";
    }
  }

  /** Palauttaa virran joka ymmärtää ä:t
   *  @return Virta joka ymmärtää ä-kirjaimet systeemin mukaan
   */
  public static BufferedWriter os() {
    return myOut;
  }

  /** Tulostaa jonon ja rivinvaihdon
   *  @param s Tulostettava jono
   */
  public static void println(String s) {
    try {
      myOut.write(s);
      myOut.newLine();
      myOut.flush();
    }
    catch ( IOException e ) { e.printStackTrace(System.err); }
  }

  /** Tulostaa jonon muttei rivinvaihtoa
   *  @param s Tulostettava jono
   */
  public static void print(String s) {
    try {
      myOut.write(s);
      myOut.flush();
    }
    catch ( IOException e ) { e.printStackTrace(System.err); }
  }

}