All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.stanford.nlp.io.EncodingPrintWriter Maven / Gradle / Ivy

package edu.stanford.nlp.io;

import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

/**
 * A convenience IO class with print and println statements to
 * standard output and standard error allowing encoding in an
 * arbitrary character set.  It also provides methods which use UTF-8
 * always, overriding the system default charset.
 *
 * @author Roger Levy
 * @author Christopher Manning
 */

public class EncodingPrintWriter {

  private static final String DEFAULT_ENCODING = "UTF-8";

  private static PrintWriter cachedErrWriter;
  private static String cachedErrEncoding = "";

  private static PrintWriter cachedOutWriter;
  private static String cachedOutEncoding = "";

  // uninstantiable
  private EncodingPrintWriter() {}

  /**
   * Print methods wrapped around System.err
   */
  public static class err {

    private err() {} // uninstantiable

    private static void setupErrWriter(String encoding) {
      if (encoding == null) {
        encoding = DEFAULT_ENCODING;
      }
      if (cachedErrWriter == null || ! cachedErrEncoding.equals(encoding)) {
        try {
          cachedErrWriter = new PrintWriter(new OutputStreamWriter(System.err, encoding), true);
          cachedErrEncoding = encoding;
        } catch (UnsupportedEncodingException e) {
          System.err.println("Error " + e + "Printing as default encoding.");
          cachedErrWriter = new PrintWriter(new OutputStreamWriter(System.err), true);
          cachedErrEncoding = "";
        }
      }
    }

    public static void println(String o, String encoding) {
      setupErrWriter(encoding);
      cachedErrWriter.println(o);
    }

    public static void print(String o, String encoding) {
      setupErrWriter(encoding);
      cachedErrWriter.print(o);
      cachedErrWriter.flush();
    }

    public static void println(String o) {
      println(o, null);
    }

    public static void print(String o) {
      print(o, null);
    }

  } // end static class err


  /**
   * Print methods wrapped around System.out
   */
  public static class out {

    private out() {} // uninstantiable

    private static void setupOutWriter(String encoding) {
      if (encoding == null) {
        encoding = DEFAULT_ENCODING;
      }
      if (cachedOutWriter == null || ! cachedOutEncoding.equals(encoding)) {
        try {
          cachedOutWriter = new PrintWriter(new OutputStreamWriter(System.out, encoding), true);
          cachedOutEncoding = encoding;
        } catch (UnsupportedEncodingException e) {
          System.err.println("Error " + e + "Printing as default encoding.");
          cachedOutWriter = new PrintWriter(new OutputStreamWriter(System.out), true);
          cachedOutEncoding = "";
        }
      }
    }

    public static void println(String o, String encoding) {
      setupOutWriter(encoding);
      cachedOutWriter.println(o);

    }

    public static void print(String o, String encoding) {
      setupOutWriter(encoding);
      cachedOutWriter.print(o);
      cachedOutWriter.flush();
    }

    /** Print the argument plus a NEWLINE in UTF-8, regardless of
     *  the platform default.
     *
     *  @param o String to print
     */
    public static void println(String o) {
      println(o, null);
    }

    public static void print(String o) {
      print(o, null);
    }

  } // end static class out

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy