PrintStream.java revision 09133811f94298bf72a3bf6ee605f60e7b1b2c81
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.io;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.charset.Charset;
213819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilsonimport java.nio.charset.IllegalCharsetNameException;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.AccessController;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Formatter;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.IllegalFormatException;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Locale;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.util.Msg;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.util.PriviAction;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Wraps an existing {@link OutputStream} and provides convenience methods for
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * writing common data types in a human readable format. This is not to be
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * confused with DataOutputStream which is used for encoding common data types
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * so that they can be read back in. No {@code IOException} is thrown by this
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * class. Instead, callers should use {@link #checkError()} to see if a problem
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * has occurred in this stream.
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class PrintStream extends FilterOutputStream implements Appendable,
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Closeable {
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static final String TOKEN_NULL = "null"; //$NON-NLS-1$
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * indicates whether or not this PrintStream has incurred an error.
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private boolean ioError;
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * indicates whether or not this PrintStream should flush its contents after
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * printing a new line.
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private boolean autoflush;
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private String encoding;
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final String lineSeparator = AccessController
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // private Formatter formatter;
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with {@code out} as its target
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. By default, the new print stream does not automatically flush its
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * contents to the target stream when a newline is encountered.
653819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param out
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target output stream.
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code out} is {@code null}.
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(OutputStream out) {
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(out);
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null) {
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with {@code out} as its target
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. The parameter {@code autoflush} determines if the print stream
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * automatically flushes its contents to the target stream when a newline is
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * encountered.
833819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param out
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target output stream.
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param autoflush
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            indicates whether to flush contents upon encountering a
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            newline sequence.
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code out} is {@code null}.
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(OutputStream out, boolean autoflush) {
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(out);
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null) {
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.autoflush = autoflush;
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with {@code out} as its target
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream and using the character encoding {@code enc} while writing. The
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * parameter {@code autoflush} determines if the print stream automatically
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * flushes its contents to the target stream when a newline is encountered.
1053819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param out
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target output stream.
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param autoflush
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            indicates whether or not to flush contents upon encountering a
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            newline sequence.
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param enc
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the non-null string describing the desired character encoding.
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code out} or {@code enc} are {@code null}.
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws UnsupportedEncodingException
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the encoding specified by {@code enc} is not supported.
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(OutputStream out, boolean autoflush, String enc)
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws UnsupportedEncodingException {
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(out);
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null || enc == null) {
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.autoflush = autoflush;
1253819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson        try {
1263819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson            if (!Charset.isSupported(enc)) {
1273819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson                throw new UnsupportedEncodingException(enc);
1283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson            }
1293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson        } catch (IllegalCharsetNameException e) {
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new UnsupportedEncodingException(enc);
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encoding = enc;
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with {@code file} as its target. The
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * virtual machine's default character set is used for character encoding.
1383819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param file
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file. If the file already exists, its contents are
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            removed, otherwise a new file is created.
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(File file) throws FileNotFoundException {
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(new FileOutputStream(file));
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with {@code file} as its target. The
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * character set named {@code csn} is used for character encoding.
1553819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param file
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file. If the file already exists, its contents are
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            removed, otherwise a new file is created.
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csn
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the name of the character set used for character encoding.
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code csn} is {@code null}.
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws UnsupportedEncodingException
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the encoding specified by {@code csn} is not supported.
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(File file, String csn) throws FileNotFoundException,
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            UnsupportedEncodingException {
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(new FileOutputStream(file));
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (csn == null) {
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!Charset.isSupported(csn)) {
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new UnsupportedEncodingException();
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encoding = csn;
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with the file identified by
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code fileName} as its target. The virtual machine's default character
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * set is used for character encoding.
1873819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fileName
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file's name. If the file already exists, its
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            contents are removed, otherwise a new file is created.
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(String fileName) throws FileNotFoundException {
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(new File(fileName));
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with the file identified by
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code fileName} as its target. The character set named {@code csn} is
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * used for character encoding.
2053819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fileName
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file's name. If the file already exists, its
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            contents are removed, otherwise a new file is created.
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csn
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the name of the character set used for character encoding.
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code csn} is {@code null}.
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws UnsupportedEncodingException
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the encoding specified by {@code csn} is not supported.
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(String fileName, String csn)
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws FileNotFoundException, UnsupportedEncodingException {
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(new File(fileName), csn);
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Flushes this stream and returns the value of the error flag.
2283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return {@code true} if either an {@code IOException} has been thrown
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         previously or if {@code setError()} has been called;
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         {@code false} otherwise.
2323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     * @see #setError()
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean checkError() {
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out != null) {
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            flush();
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return ioError;
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Closes this print stream. Flushes this stream and then closes the target
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. If an I/O error occurs, this stream's error state is set to
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code true}.
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void close() {
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        flush();
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out != null) {
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out.close();
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out = null;
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Ensures that all pending data is sent out to the target stream. It also
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * flushes the target stream. If an I/O error occurs, this stream's error
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * state is set to {@code true}.
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void flush() {
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out != null) {
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out.flush();
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // Ignored, fall through to setError
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setError();
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes a string formatted by an intermediate {@code Formatter} to the
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target stream using the specified format string and arguments. For the
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * locale, the default value of the current virtual machine instance is
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * used.
2823819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream format(String format, Object... args) {
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(Locale.getDefault(), format, args);
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes a string formatted by an intermediate {@link Formatter} to this
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream using the specified locale, format string and arguments.
3043819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param l
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the locale used in the method. No localization will be applied
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            if {@code l} is {@code null}.
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream format(Locale l, String format, Object... args) {
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (format == null) {
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException(Msg.getString("K0351")); //$NON-NLS-1$
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Formatter(this, l).format(format, args);
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a formatted string. The behavior of this method is the same as
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * this stream's {@code #format(String, Object...)} method. For the locale,
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the default value of the current virtual machine instance is used.
3343819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@link java.util.Formatter#format}.
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream printf(String format, Object... args) {
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(format, args);
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a formatted string. The behavior of this method is the same as
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * this stream's {@code #format(Locale, String, Object...)} method.
3573819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param l
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the locale used in the method. No localization will be applied
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            if {@code l} is {@code null}.
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream printf(Locale l, String format, Object... args) {
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(l, format, args);
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Put the line separator String onto the print stream.
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private void newline() {
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(lineSeparator);
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character array
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target stream.
3893819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param charArray
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character array to print to the target stream.
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(char[] charArray) {
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(new String(charArray, 0, charArray.length));
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character to the target
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4013819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param ch
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to print to the target stream.
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(char ch) {
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(ch));
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified double to the target
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4133819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dnum
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the double value to print to the target stream.
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(double dnum) {
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(dnum));
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified float to the target
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4253819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fnum
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the float value to print to the target stream.
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
4293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(float fnum) {
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(fnum));
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified integer to the target
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4373819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param inum
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the integer value to print to the target stream.
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
4413819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(int inum) {
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(inum));
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified long to the target
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4493819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param lnum
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the long value to print to the target stream.
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
4533819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(long lnum) {
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(lnum));
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified object to the target
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4613819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param obj
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to print to the target stream.
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
4653819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(Object obj) {
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(obj));
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a string to the target stream. The string is converted to an array
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of bytes using the encoding chosen during the construction of this
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. The bytes are then written to the target stream with
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code write(int)}.
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If an I/O error occurs, this stream's error state is set to {@code true}.
4773819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param str
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the string to print to the target stream.
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #write(int)
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void print(String str) {
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null) {
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (str == null) {
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print("null"); //$NON-NLS-1$
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (encoding == null) {
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                write(str.getBytes());
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                write(str.getBytes(encoding));
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified boolean to the target
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
5063819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param bool
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the boolean value to print the target stream.
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
5103819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(boolean bool) {
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(bool));
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the system property
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code "line.separator"} to the target stream.
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println() {
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        newline();
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character array
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * followed by the system property {@code "line.separator"} to the target
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
5273819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param charArray
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character array to print to the target stream.
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(char[] charArray) {
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(new String(charArray, 0, charArray.length));
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character followed by
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the system property {@code "line.separator"} to the target stream.
5393819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param ch
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to print to the target stream.
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(char ch) {
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(ch));
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified double followed by the
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
5513819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dnum
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the double value to print to the target stream.
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(double dnum) {
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(dnum));
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified float followed by the
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
5633819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fnum
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the float value to print to the target stream.
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
5673819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   public void println(float fnum) {
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(fnum));
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   /**
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified integer followed by the
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
5753819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param inum
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the integer value to print to the target stream.
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
5803819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(int inum) {
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(inum));
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified long followed by the
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
5883819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param lnum
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the long value to print to the target stream.
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
5933819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(long lnum) {
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(lnum));
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified object followed by the
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
6013819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param obj
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to print to the target stream.
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
6063819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(Object obj) {
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(obj));
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a string followed by the system property {@code "line.separator"}
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target stream. The string is converted to an array of bytes using
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the encoding chosen during the construction of this stream. The bytes are
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * then written to the target stream with {@code write(int)}.
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If an I/O error occurs, this stream's error state is set to {@code true}.
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * </p>
6193819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param str
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the string to print to the target stream.
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #write(int)
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void println(String str) {
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(str);
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        newline();
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified boolean followed by the
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
6333819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param bool
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the boolean value to print to the target stream.
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
6373819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(boolean bool) {
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(bool));
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the error flag of this print stream to {@code true}.
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setError() {
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ioError = true;
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes {@code count} bytes from {@code buffer} starting at {@code offset}
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target stream. If autoflush is set, this stream gets flushed after
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writing the buffer.
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This stream's error flag is set to {@code true} if this stream is closed
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * or an I/O error occurs.
6563819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param buffer
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the buffer to be written.
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param offset
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the first byte in {@code buffer} to write.
66109133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson     * @param length
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the number of bytes in {@code buffer} to write.
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IndexOutOfBoundsException
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code offset < 0} or {@code count < 0}, or if {@code
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             offset + count} is bigger than the length of {@code buffer}.
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #flush()
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
66909133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson    public void write(byte[] buffer, int offset, int length) {
67009133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson        // Force buffer null check first!
67109133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson        if (offset > buffer.length || offset < 0) {
67209133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson            // K002e=Offset out of bounds \: {0}
67309133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson            throw new ArrayIndexOutOfBoundsException(Msg.getString("K002e", offset)); //$NON-NLS-1$
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
67509133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson        if (length < 0 || length > buffer.length - offset) {
67609133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson            // K0031=Length out of bounds \: {0}
67709133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson            throw new ArrayIndexOutOfBoundsException(Msg.getString("K0031", length)); //$NON-NLS-1$
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (this) {
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (out == null) {
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
68509133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson                out.write(buffer, offset, length);
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (autoflush) {
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    flush();
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes one byte to the target stream. Only the least significant byte of
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the integer {@code oneByte} is written. This stream is flushed if
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code oneByte} is equal to the character {@code '\n'} and this stream is
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * set to autoflush.
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This stream's error flag is set to {@code true} if it is closed or an I/O
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * error occurs.
7033819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param oneByte
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the byte to be written
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void write(int oneByte) {
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null) {
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            out.write(oneByte);
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (autoflush && (oneByte & 0xFF) == '\n') {
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                flush();
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends the character {@code c} to the target stream. This method works
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the same way as {@link #print(char)}.
7263819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param c
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to append to the target stream.
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream append(char c) {
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(c);
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends the character sequence {@code csq} to the target stream. This
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * method works the same way as {@code PrintStream.print(csq.toString())}.
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If {@code csq} is {@code null}, then the string "null" is written to the
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target stream.
7413819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csq
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character sequence appended to the target stream.
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream append(CharSequence csq) {
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (null == csq) {
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(TOKEN_NULL);
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(csq.toString());
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends a subsequence of the character sequence {@code csq} to the target
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. This method works the same way as {@code
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * PrintStream.print(csq.subsequence(start, end).toString())}. If {@code
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * csq} is {@code null}, then the specified subsequence of the string "null"
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * will be written to the target stream.
7613819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csq
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character sequence appended to the target stream.
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param start
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the first char in the character sequence appended
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            to the target stream.
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param end
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the character following the last character of the
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            subsequence appended to the target stream.
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IndexOutOfBoundsException
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code start > end}, {@code start < 0}, {@code end < 0} or
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             either {@code start} or {@code end} are greater or equal than
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             the length of {@code csq}.
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream append(CharSequence csq, int start, int end) {
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (null == csq) {
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(TOKEN_NULL.substring(start, end));
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(csq.subSequence(start, end).toString());
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
785