151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. 351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage java.io; 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.util.Objects; 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.util.Formatter; 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.util.Locale; 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.nio.charset.Charset; 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.nio.charset.IllegalCharsetNameException; 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.nio.charset.UnsupportedCharsetException; 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/** 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints formatted representations of objects to a text-output stream. This 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * class implements all of the <tt>print</tt> methods found in {@link 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * PrintStream}. It does not contain methods for writing raw bytes, for which 3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * a program should use unencoded byte streams. 4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> Unlike the {@link PrintStream} class, if automatic flushing is enabled 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * it will be done only when one of the <tt>println</tt>, <tt>printf</tt>, or 4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>format</tt> methods is invoked, rather than whenever a newline character 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * happens to be output. These methods use the platform's own notion of line 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * separator rather than the newline character. 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> Methods in this class never throw I/O exceptions, although some of its 4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * constructors may. The client may inquire as to whether any errors have 4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * occurred by invoking {@link #checkError checkError()}. 5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Frank Yellin 5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Mark Reinhold 5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since JDK1.1 5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic class PrintWriter extends Writer { 5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 5851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The underlying character-output stream of this 6051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>PrintWriter</code>. 6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.2 6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski protected Writer out; 6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final boolean autoFlush; 6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private boolean trouble = false; 6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private Formatter formatter; 6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private PrintStream psOut = null; 7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Line separator string. This is the value of the line.separator 7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * property at the moment that the stream was created. 7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final String lineSeparator; 7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a charset object for the given charset name. 7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException is csn is null 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws UnsupportedEncodingException if the charset is not supported 8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static Charset toCharset(String csn) 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws UnsupportedEncodingException 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Objects.requireNonNull(csn, "charsetName"); 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return Charset.forName(csn); 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } catch (IllegalCharsetNameException|UnsupportedCharsetException unused) { 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // UnsupportedEncodingException should be thrown 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new UnsupportedEncodingException(csn); 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a new PrintWriter, without automatic line flushing. 9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param out A character-output stream 9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter (Writer out) { 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(out, false); 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a new PrintWriter. 10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param out A character-output stream 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param autoFlush A boolean; if true, the <tt>println</tt>, 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>printf</tt>, or <tt>format</tt> methods will 10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * flush the output buffer 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter(Writer out, 11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski boolean autoFlush) { 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski super(out); 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.out = out; 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.autoFlush = autoFlush; 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski lineSeparator = java.security.AccessController.doPrivileged( 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski new sun.security.action.GetPropertyAction("line.separator")); 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a new PrintWriter, without automatic line flushing, from an 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * existing OutputStream. This convenience constructor creates the 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * necessary intermediate OutputStreamWriter, which will convert characters 12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * into bytes using the default character encoding. 12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param out An output stream 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.io.OutputStreamWriter#OutputStreamWriter(java.io.OutputStream) 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter(OutputStream out) { 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(out, false); 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a new PrintWriter from an existing OutputStream. This 13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * convenience constructor creates the necessary intermediate 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * OutputStreamWriter, which will convert characters into bytes using the 13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * default character encoding. 13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param out An output stream 14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param autoFlush A boolean; if true, the <tt>println</tt>, 14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>printf</tt>, or <tt>format</tt> methods will 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * flush the output buffer 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.io.OutputStreamWriter#OutputStreamWriter(java.io.OutputStream) 14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter(OutputStream out, boolean autoFlush) { 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(new BufferedWriter(new OutputStreamWriter(out)), autoFlush); 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // save print stream for error propagation 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (out instanceof java.io.PrintStream) { 15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski psOut = (PrintStream) out; 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a new PrintWriter, without automatic line flushing, with the 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified file name. This convenience constructor creates the necessary 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * intermediate {@link java.io.OutputStreamWriter OutputStreamWriter}, 16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * which will encode characters using the {@linkplain 16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * java.nio.charset.Charset#defaultCharset() default charset} for this 16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * instance of the Java virtual machine. 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param fileName 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The name of the file to use as the destination of this writer. 16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the file exists then it will be truncated to zero size; 16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * otherwise, a new file will be created. The output will be 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * written to the file and is buffered. 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws FileNotFoundException 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the given string does not denote an existing, writable 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * regular file and a new regular file of that name cannot be 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * created, or if some other error occurs while opening or 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * creating the file 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws SecurityException 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If a security manager is present and {@link 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SecurityManager#checkWrite checkWrite(fileName)} denies write 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * access to the file 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter(String fileName) throws FileNotFoundException { 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))), 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski false); 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /* Private constructor */ 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private PrintWriter(Charset charset, File file) 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws FileNotFoundException 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), charset)), 19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski false); 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a new PrintWriter, without automatic line flushing, with the 19851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified file name and charset. This convenience constructor creates 19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the necessary intermediate {@link java.io.OutputStreamWriter 20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * OutputStreamWriter}, which will encode characters using the provided 20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * charset. 20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param fileName 20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The name of the file to use as the destination of this writer. 20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the file exists then it will be truncated to zero size; 20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * otherwise, a new file will be created. The output will be 20751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * written to the file and is buffered. 20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 20951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param csn 21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The name of a supported {@linkplain java.nio.charset.Charset 21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * charset} 21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws FileNotFoundException 21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the given string does not denote an existing, writable 21551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * regular file and a new regular file of that name cannot be 21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * created, or if some other error occurs while opening or 21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * creating the file 21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws SecurityException 22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If a security manager is present and {@link 22151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SecurityManager#checkWrite checkWrite(fileName)} denies write 22251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * access to the file 22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws UnsupportedEncodingException 22551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the named charset is not supported 22651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 22951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter(String fileName, String csn) 23051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws FileNotFoundException, UnsupportedEncodingException 23151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 23251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(toCharset(csn), new File(fileName)); 23351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 23551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 23651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a new PrintWriter, without automatic line flushing, with the 23751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified file. This convenience constructor creates the necessary 23851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * intermediate {@link java.io.OutputStreamWriter OutputStreamWriter}, 23951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * which will encode characters using the {@linkplain 24051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * java.nio.charset.Charset#defaultCharset() default charset} for this 24151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * instance of the Java virtual machine. 24251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 24351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param file 24451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The file to use as the destination of this writer. If the file 24551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * exists then it will be truncated to zero size; otherwise, a new 24651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * file will be created. The output will be written to the file 24751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * and is buffered. 24851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 24951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws FileNotFoundException 25051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the given file object does not denote an existing, writable 25151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * regular file and a new regular file of that name cannot be 25251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * created, or if some other error occurs while opening or 25351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * creating the file 25451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 25551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws SecurityException 25651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If a security manager is present and {@link 25751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SecurityManager#checkWrite checkWrite(file.getPath())} 25851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * denies write access to the file 25951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 26051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 26151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 26251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter(File file) throws FileNotFoundException { 26351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))), 26451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski false); 26551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 26651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 26751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 26851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Creates a new PrintWriter, without automatic line flushing, with the 26951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specified file and charset. This convenience constructor creates the 27051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * necessary intermediate {@link java.io.OutputStreamWriter 27151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * OutputStreamWriter}, which will encode characters using the provided 27251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * charset. 27351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 27451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param file 27551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The file to use as the destination of this writer. If the file 27651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * exists then it will be truncated to zero size; otherwise, a new 27751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * file will be created. The output will be written to the file 27851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * and is buffered. 27951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 28051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param csn 28151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The name of a supported {@linkplain java.nio.charset.Charset 28251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * charset} 28351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 28451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws FileNotFoundException 28551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the given file object does not denote an existing, writable 28651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * regular file and a new regular file of that name cannot be 28751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * created, or if some other error occurs while opening or 28851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * creating the file 28951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 29051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws SecurityException 29151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If a security manager is present and {@link 29251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * SecurityManager#checkWrite checkWrite(file.getPath())} 29351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * denies write access to the file 29451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 29551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws UnsupportedEncodingException 29651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the named charset is not supported 29751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 29851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 29951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 30051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter(File file, String csn) 30151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throws FileNotFoundException, UnsupportedEncodingException 30251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski { 30351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this(toCharset(csn), file); 30451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 30551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 30651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** Checks to make sure that the stream has not been closed */ 30751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private void ensureOpen() throws IOException { 30851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (out == null) 30951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IOException("Stream closed"); 31051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 31151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 31251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 31351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Flushes the stream. 31451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #checkError() 31551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 31651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void flush() { 31751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 31851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 31951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ensureOpen(); 32051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out.flush(); 32151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski catch (IOException x) { 32451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski trouble = true; 32551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 32851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 32951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Closes the stream and releases any system resources associated 33051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * with it. Closing a previously closed stream has no effect. 33151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 33251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see #checkError() 33351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 33451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void close() { 33551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 33651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 33751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (out == null) 33851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return; 33951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out.close(); 34051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out = null; 34151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 34251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 34351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski catch (IOException x) { 34451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski trouble = true; 34551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 34651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 34751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 34851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 34951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Flushes the stream if it's not closed and checks its error state. 35051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 35151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return <code>true</code> if the print stream has encountered an error, 35251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * either on the underlying output stream or during a format 35351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * conversion. 35451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 35551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean checkError() { 35651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (out != null) { 35751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski flush(); 35851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 35951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (out instanceof java.io.PrintWriter) { 36051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski PrintWriter pw = (PrintWriter) out; 36151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return pw.checkError(); 36251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else if (psOut != null) { 36351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return psOut.checkError(); 36451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 36551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return trouble; 36651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 36751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 36851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 36951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Indicates that an error has occurred. 37051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 37151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> This method will cause subsequent invocations of {@link 37251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * #checkError()} to return <tt>true</tt> until {@link 37351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * #clearError()} is invoked. 37451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 37551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski protected void setError() { 37651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski trouble = true; 37751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 37851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 37951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 38051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Clears the error state of this stream. 38151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 38251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> This method will cause subsequent invocations of {@link 38351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * #checkError()} to return <tt>false</tt> until another write 38451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * operation fails and invokes {@link #setError()}. 38551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 38651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.6 38751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 38851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski protected void clearError() { 38951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski trouble = false; 39051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 39151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 39251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /* 39351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Exception-catching, synchronized output operations, 39451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * which also implement the write() methods of Writer 39551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 39651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 39751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 39851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Writes a single character. 39951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param c int specifying a character to be written. 40051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 40151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void write(int c) { 40251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 40351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 40451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ensureOpen(); 40551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out.write(c); 40651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 40751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 40851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski catch (InterruptedIOException x) { 40951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Thread.currentThread().interrupt(); 41051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 41151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski catch (IOException x) { 41251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski trouble = true; 41351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 41451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 41551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 41651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 41751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Writes A Portion of an array of characters. 41851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param buf Array of characters 41951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param off Offset from which to start writing characters 42051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param len Number of characters to write 42151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 42251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void write(char buf[], int off, int len) { 42351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 42451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 42551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ensureOpen(); 42651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out.write(buf, off, len); 42751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 42851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 42951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski catch (InterruptedIOException x) { 43051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Thread.currentThread().interrupt(); 43151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 43251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski catch (IOException x) { 43351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski trouble = true; 43451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 43551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 43651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 43751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 43851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Writes an array of characters. This method cannot be inherited from the 43951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Writer class because it must suppress I/O exceptions. 44051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param buf Array of characters to be written 44151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 44251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void write(char buf[]) { 44351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(buf, 0, buf.length); 44451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 44551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 44651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 44751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Writes a portion of a string. 44851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param s A String 44951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param off Offset from which to start writing characters 45051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param len Number of characters to write 45151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 45251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void write(String s, int off, int len) { 45351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 45451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 45551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ensureOpen(); 45651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out.write(s, off, len); 45751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 45851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 45951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski catch (InterruptedIOException x) { 46051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Thread.currentThread().interrupt(); 46151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 46251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski catch (IOException x) { 46351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski trouble = true; 46451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 46551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 46651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 46751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 46851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Writes a string. This method cannot be inherited from the Writer class 46951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * because it must suppress I/O exceptions. 47051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param s String to be written 47151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 47251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void write(String s) { 47351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(s, 0, s.length()); 47451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 47551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 47651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private void newLine() { 47751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 47851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 47951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ensureOpen(); 48051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out.write(lineSeparator); 48151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (autoFlush) 48251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out.flush(); 48351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 48451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 48551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski catch (InterruptedIOException x) { 48651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Thread.currentThread().interrupt(); 48751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 48851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski catch (IOException x) { 48951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski trouble = true; 49051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 49151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 49251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 49351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /* Methods that do not terminate lines */ 49451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 49551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 49651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a boolean value. The string produced by <code>{@link 49751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * java.lang.String#valueOf(boolean)}</code> is translated into bytes 49851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * according to the platform's default character encoding, and these bytes 49951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * are written in exactly the manner of the <code>{@link 50051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * #write(int)}</code> method. 50151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 50251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param b The <code>boolean</code> to be printed 50351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 50451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void print(boolean b) { 50551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(b ? "true" : "false"); 50651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 50751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 50851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 50951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a character. The character is translated into one or more bytes 51051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * according to the platform's default character encoding, and these bytes 51151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * are written in exactly the manner of the <code>{@link 51251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * #write(int)}</code> method. 51351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 51451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param c The <code>char</code> to be printed 51551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 51651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void print(char c) { 51751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(c); 51851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 51951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 52051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 52151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints an integer. The string produced by <code>{@link 52251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * java.lang.String#valueOf(int)}</code> is translated into bytes according 52351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * to the platform's default character encoding, and these bytes are 52451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * written in exactly the manner of the <code>{@link #write(int)}</code> 52551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * method. 52651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 52751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param i The <code>int</code> to be printed 52851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.lang.Integer#toString(int) 52951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 53051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void print(int i) { 53151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(String.valueOf(i)); 53251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 53351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 53451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 53551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a long integer. The string produced by <code>{@link 53651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * java.lang.String#valueOf(long)}</code> is translated into bytes 53751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * according to the platform's default character encoding, and these bytes 53851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * are written in exactly the manner of the <code>{@link #write(int)}</code> 53951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * method. 54051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 54151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param l The <code>long</code> to be printed 54251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.lang.Long#toString(long) 54351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 54451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void print(long l) { 54551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(String.valueOf(l)); 54651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 54751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 54851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 54951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a floating-point number. The string produced by <code>{@link 55051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * java.lang.String#valueOf(float)}</code> is translated into bytes 55151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * according to the platform's default character encoding, and these bytes 55251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * are written in exactly the manner of the <code>{@link #write(int)}</code> 55351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * method. 55451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 55551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param f The <code>float</code> to be printed 55651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.lang.Float#toString(float) 55751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 55851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void print(float f) { 55951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(String.valueOf(f)); 56051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 56151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 56251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 56351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a double-precision floating-point number. The string produced by 56451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>{@link java.lang.String#valueOf(double)}</code> is translated into 56551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * bytes according to the platform's default character encoding, and these 56651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * bytes are written in exactly the manner of the <code>{@link 56751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * #write(int)}</code> method. 56851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 56951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param d The <code>double</code> to be printed 57051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.lang.Double#toString(double) 57151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 57251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void print(double d) { 57351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(String.valueOf(d)); 57451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 57551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 57651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 57751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints an array of characters. The characters are converted into bytes 57851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * according to the platform's default character encoding, and these bytes 57951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * are written in exactly the manner of the <code>{@link #write(int)}</code> 58051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * method. 58151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 58251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param s The array of chars to be printed 58351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 58451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException If <code>s</code> is <code>null</code> 58551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 58651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void print(char s[]) { 58751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(s); 58851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 58951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 59051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 59151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a string. If the argument is <code>null</code> then the string 59251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>"null"</code> is printed. Otherwise, the string's characters are 59351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * converted into bytes according to the platform's default character 59451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * encoding, and these bytes are written in exactly the manner of the 59551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>{@link #write(int)}</code> method. 59651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 59751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param s The <code>String</code> to be printed 59851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 59951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void print(String s) { 60051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (s == null) { 60151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski s = "null"; 60251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 60351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(s); 60451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 60551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 60651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 60751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints an object. The string produced by the <code>{@link 60851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * java.lang.String#valueOf(Object)}</code> method is translated into bytes 60951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * according to the platform's default character encoding, and these bytes 61051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * are written in exactly the manner of the <code>{@link #write(int)}</code> 61151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * method. 61251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 61351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param obj The <code>Object</code> to be printed 61451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @see java.lang.Object#toString() 61551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 61651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void print(Object obj) { 61751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(String.valueOf(obj)); 61851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 61951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 62051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /* Methods that do terminate lines */ 62151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 62251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 62351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Terminates the current line by writing the line separator string. The 62451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * line separator string is defined by the system property 62551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>line.separator</code>, and is not necessarily a single newline 62651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * character (<code>'\n'</code>). 62751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 62851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void println() { 62951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski newLine(); 63051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 63151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 63251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 63351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a boolean value and then terminates the line. This method behaves 63451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * as though it invokes <code>{@link #print(boolean)}</code> and then 63551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>{@link #println()}</code>. 63651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 63751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param x the <code>boolean</code> value to be printed 63851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 63951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void println(boolean x) { 64051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 64151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski print(x); 64251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski println(); 64351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 64451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 64551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 64651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 64751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a character and then terminates the line. This method behaves as 64851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * though it invokes <code>{@link #print(char)}</code> and then <code>{@link 64951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * #println()}</code>. 65051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 65151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param x the <code>char</code> value to be printed 65251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 65351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void println(char x) { 65451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 65551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski print(x); 65651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski println(); 65751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 65851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 65951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 66051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 66151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints an integer and then terminates the line. This method behaves as 66251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * though it invokes <code>{@link #print(int)}</code> and then <code>{@link 66351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * #println()}</code>. 66451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 66551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param x the <code>int</code> value to be printed 66651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 66751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void println(int x) { 66851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 66951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski print(x); 67051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski println(); 67151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 67251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 67351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 67451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 67551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a long integer and then terminates the line. This method behaves 67651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * as though it invokes <code>{@link #print(long)}</code> and then 67751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>{@link #println()}</code>. 67851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 67951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param x the <code>long</code> value to be printed 68051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 68151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void println(long x) { 68251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 68351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski print(x); 68451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski println(); 68551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 68651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 68751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 68851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 68951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a floating-point number and then terminates the line. This method 69051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * behaves as though it invokes <code>{@link #print(float)}</code> and then 69151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>{@link #println()}</code>. 69251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 69351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param x the <code>float</code> value to be printed 69451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 69551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void println(float x) { 69651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 69751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski print(x); 69851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski println(); 69951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 70051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 70151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 70251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 70351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a double-precision floating-point number and then terminates the 70451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * line. This method behaves as though it invokes <code>{@link 70551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * #print(double)}</code> and then <code>{@link #println()}</code>. 70651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 70751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param x the <code>double</code> value to be printed 70851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 70951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void println(double x) { 71051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 71151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski print(x); 71251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski println(); 71351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 71451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 71551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 71651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 71751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints an array of characters and then terminates the line. This method 71851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * behaves as though it invokes <code>{@link #print(char[])}</code> and then 71951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>{@link #println()}</code>. 72051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 72151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param x the array of <code>char</code> values to be printed 72251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 72351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void println(char x[]) { 72451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 72551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski print(x); 72651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski println(); 72751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 72851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 72951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 73051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 73151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints a String and then terminates the line. This method behaves as 73251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * though it invokes <code>{@link #print(String)}</code> and then 73351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>{@link #println()}</code>. 73451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 73551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param x the <code>String</code> value to be printed 73651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 73751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void println(String x) { 73851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 73951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski print(x); 74051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski println(); 74151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 74251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 74351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 74451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 74551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Prints an Object and then terminates the line. This method calls 74651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * at first String.valueOf(x) to get the printed object's string value, 74751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * then behaves as 74851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * though it invokes <code>{@link #print(String)}</code> and then 74951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <code>{@link #println()}</code>. 75051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 75151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param x The <code>Object</code> to be printed. 75251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 75351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void println(Object x) { 75451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski String s = String.valueOf(x); 75551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 75651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski print(s); 75751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski println(); 75851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 75951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 76051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 76151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 76251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A convenience method to write a formatted string to this writer using 76351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the specified format string and arguments. If automatic flushing is 76451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * enabled, calls to this method will flush the output buffer. 76551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 76651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> An invocation of this method of the form <tt>out.printf(format, 76751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * args)</tt> behaves in exactly the same way as the invocation 76851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 76951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <pre> 77051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * out.format(format, args) </pre> 77151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 77251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param format 77351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A format string as described in <a 77451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#syntax">Format string syntax</a>. 77551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 77651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param args 77751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Arguments referenced by the format specifiers in the format 77851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * string. If there are more arguments than format specifiers, the 77951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * extra arguments are ignored. The number of arguments is 78051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * variable and may be zero. The maximum number of arguments is 78151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * limited by the maximum dimension of a Java array as defined by 78251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <cite>The Java™ Virtual Machine Specification</cite>. 78351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The behaviour on a 78451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>null</tt> argument depends on the <a 78551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#syntax">conversion</a>. 78651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 78751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalFormatException 78851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If a format string contains an illegal syntax, a format 78951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specifier that is incompatible with the given arguments, 79051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * insufficient arguments given the format string, or other 79151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * illegal conditions. For specification of all possible 79251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * formatting errors, see the <a 79351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#detail">Details</a> section of the 79451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * formatter class specification. 79551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 79651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException 79751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the <tt>format</tt> is <tt>null</tt> 79851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 79951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return This writer 80051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 80151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 80251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 80351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter printf(String format, Object ... args) { 80451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return format(format, args); 80551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 80651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 80751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 80851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A convenience method to write a formatted string to this writer using 80951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the specified format string and arguments. If automatic flushing is 81051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * enabled, calls to this method will flush the output buffer. 81151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 81251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> An invocation of this method of the form <tt>out.printf(l, format, 81351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * args)</tt> behaves in exactly the same way as the invocation 81451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 81551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <pre> 81651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * out.format(l, format, args) </pre> 81751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 81851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param l 81951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The {@linkplain java.util.Locale locale} to apply during 82051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * formatting. If <tt>l</tt> is <tt>null</tt> then no localization 82151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is applied. 82251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 82351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param format 82451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A format string as described in <a 82551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#syntax">Format string syntax</a>. 82651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 82751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param args 82851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Arguments referenced by the format specifiers in the format 82951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * string. If there are more arguments than format specifiers, the 83051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * extra arguments are ignored. The number of arguments is 83151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * variable and may be zero. The maximum number of arguments is 83251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * limited by the maximum dimension of a Java array as defined by 83351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <cite>The Java™ Virtual Machine Specification</cite>. 83451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The behaviour on a 83551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>null</tt> argument depends on the <a 83651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#syntax">conversion</a>. 83751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 83851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalFormatException 83951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If a format string contains an illegal syntax, a format 84051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specifier that is incompatible with the given arguments, 84151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * insufficient arguments given the format string, or other 84251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * illegal conditions. For specification of all possible 84351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * formatting errors, see the <a 84451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#detail">Details</a> section of the 84551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * formatter class specification. 84651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 84751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException 84851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the <tt>format</tt> is <tt>null</tt> 84951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 85051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return This writer 85151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 85251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 85351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 85451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter printf(Locale l, String format, Object ... args) { 85551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return format(l, format, args); 85651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 85751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 85851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 85951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Writes a formatted string to this writer using the specified format 86051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * string and arguments. If automatic flushing is enabled, calls to this 86151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * method will flush the output buffer. 86251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 86351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> The locale always used is the one returned by {@link 86451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * java.util.Locale#getDefault() Locale.getDefault()}, regardless of any 86551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * previous invocations of other formatting methods on this object. 86651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 86751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param format 86851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A format string as described in <a 86951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#syntax">Format string syntax</a>. 87051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 87151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param args 87251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Arguments referenced by the format specifiers in the format 87351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * string. If there are more arguments than format specifiers, the 87451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * extra arguments are ignored. The number of arguments is 87551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * variable and may be zero. The maximum number of arguments is 87651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * limited by the maximum dimension of a Java array as defined by 87751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <cite>The Java™ Virtual Machine Specification</cite>. 87851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The behaviour on a 87951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>null</tt> argument depends on the <a 88051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#syntax">conversion</a>. 88151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 88251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalFormatException 88351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If a format string contains an illegal syntax, a format 88451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specifier that is incompatible with the given arguments, 88551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * insufficient arguments given the format string, or other 88651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * illegal conditions. For specification of all possible 88751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * formatting errors, see the <a 88851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#detail">Details</a> section of the 88951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Formatter class specification. 89051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 89151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException 89251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the <tt>format</tt> is <tt>null</tt> 89351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 89451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return This writer 89551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 89651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 89751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 89851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter format(String format, Object ... args) { 89951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 90051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 90151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ensureOpen(); 90251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if ((formatter == null) 90351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski || (formatter.locale() != Locale.getDefault())) 90451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski formatter = new Formatter(this); 90551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski formatter.format(Locale.getDefault(), format, args); 90651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (autoFlush) 90751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out.flush(); 90851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 90951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } catch (InterruptedIOException x) { 91051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Thread.currentThread().interrupt(); 91151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } catch (IOException x) { 91251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski trouble = true; 91351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 91451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 91551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 91651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 91751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 91851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Writes a formatted string to this writer using the specified format 91951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * string and arguments. If automatic flushing is enabled, calls to this 92051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * method will flush the output buffer. 92151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 92251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param l 92351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The {@linkplain java.util.Locale locale} to apply during 92451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * formatting. If <tt>l</tt> is <tt>null</tt> then no localization 92551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is applied. 92651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 92751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param format 92851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * A format string as described in <a 92951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#syntax">Format string syntax</a>. 93051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 93151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param args 93251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Arguments referenced by the format specifiers in the format 93351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * string. If there are more arguments than format specifiers, the 93451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * extra arguments are ignored. The number of arguments is 93551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * variable and may be zero. The maximum number of arguments is 93651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * limited by the maximum dimension of a Java array as defined by 93751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <cite>The Java™ Virtual Machine Specification</cite>. 93851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The behaviour on a 93951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>null</tt> argument depends on the <a 94051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#syntax">conversion</a>. 94151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 94251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IllegalFormatException 94351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If a format string contains an illegal syntax, a format 94451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * specifier that is incompatible with the given arguments, 94551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * insufficient arguments given the format string, or other 94651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * illegal conditions. For specification of all possible 94751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * formatting errors, see the <a 94851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * href="../util/Formatter.html#detail">Details</a> section of the 94951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * formatter class specification. 95051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 95151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws NullPointerException 95251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If the <tt>format</tt> is <tt>null</tt> 95351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 95451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return This writer 95551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 95651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 95751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 95851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter format(Locale l, String format, Object ... args) { 95951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 96051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski synchronized (lock) { 96151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ensureOpen(); 96251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if ((formatter == null) || (formatter.locale() != l)) 96351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski formatter = new Formatter(this, l); 96451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski formatter.format(l, format, args); 96551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (autoFlush) 96651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out.flush(); 96751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 96851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } catch (InterruptedIOException x) { 96951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Thread.currentThread().interrupt(); 97051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } catch (IOException x) { 97151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski trouble = true; 97251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 97351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 97451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 97551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 97651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 97751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Appends the specified character sequence to this writer. 97851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 97951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> An invocation of this method of the form <tt>out.append(csq)</tt> 98051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * behaves in exactly the same way as the invocation 98151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 98251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <pre> 98351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * out.write(csq.toString()) </pre> 98451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 98551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> Depending on the specification of <tt>toString</tt> for the 98651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * character sequence <tt>csq</tt>, the entire sequence may not be 98751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * appended. For instance, invoking the <tt>toString</tt> method of a 98851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * character buffer will return a subsequence whose content depends upon 98951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the buffer's position and limit. 99051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 99151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param csq 99251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The character sequence to append. If <tt>csq</tt> is 99351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>null</tt>, then the four characters <tt>"null"</tt> are 99451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * appended to this writer. 99551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 99651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return This writer 99751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 99851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 99951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 100051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter append(CharSequence csq) { 100151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (csq == null) 100251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write("null"); 100351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski else 100451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(csq.toString()); 100551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 100651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 100751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 100851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 100951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Appends a subsequence of the specified character sequence to this writer. 101051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 101151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> An invocation of this method of the form <tt>out.append(csq, start, 101251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * end)</tt> when <tt>csq</tt> is not <tt>null</tt>, behaves in 101351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * exactly the same way as the invocation 101451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 101551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <pre> 101651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * out.write(csq.subSequence(start, end).toString()) </pre> 101751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 101851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param csq 101951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The character sequence from which a subsequence will be 102051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * appended. If <tt>csq</tt> is <tt>null</tt>, then characters 102151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * will be appended as if <tt>csq</tt> contained the four 102251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * characters <tt>"null"</tt>. 102351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 102451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param start 102551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The index of the first character in the subsequence 102651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 102751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param end 102851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The index of the character following the last character in the 102951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * subsequence 103051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 103151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return This writer 103251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 103351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @throws IndexOutOfBoundsException 103451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * If <tt>start</tt> or <tt>end</tt> are negative, <tt>start</tt> 103551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * is greater than <tt>end</tt>, or <tt>end</tt> is greater than 103651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <tt>csq.length()</tt> 103751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 103851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 103951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 104051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter append(CharSequence csq, int start, int end) { 104151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CharSequence cs = (csq == null ? "null" : csq); 104251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(cs.subSequence(start, end).toString()); 104351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 104451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 104551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 104651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 104751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Appends the specified character to this writer. 104851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 104951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p> An invocation of this method of the form <tt>out.append(c)</tt> 105051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * behaves in exactly the same way as the invocation 105151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 105251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <pre> 105351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * out.write(c) </pre> 105451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 105551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param c 105651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * The 16-bit character to append 105751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 105851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @return This writer 105951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 106051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @since 1.5 106151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 106251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public PrintWriter append(char c) { 106351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski write(c); 106451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return this; 106551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 106651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 1067