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