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() {
23572e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson        OutputStream delegate = out;
23672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson        if (delegate == null) {
23772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson            return ioError;
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
23972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson
24072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson        flush();
24172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson        return ioError || delegate.checkError();
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Closes this print stream. Flushes this stream and then closes the target
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. If an I/O error occurs, this stream's error state is set to
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code true}.
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void close() {
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        flush();
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out != null) {
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out.close();
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out = null;
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Ensures that all pending data is sent out to the target stream. It also
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * flushes the target stream. If an I/O error occurs, this stream's error
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * state is set to {@code true}.
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void flush() {
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out != null) {
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out.flush();
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // Ignored, fall through to setError
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setError();
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes a string formatted by an intermediate {@code Formatter} to the
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target stream using the specified format string and arguments. For the
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * locale, the default value of the current virtual machine instance is
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * used.
2853819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream format(String format, Object... args) {
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(Locale.getDefault(), format, args);
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes a string formatted by an intermediate {@link Formatter} to this
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream using the specified locale, format string and arguments.
3073819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param l
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the locale used in the method. No localization will be applied
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            if {@code l} is {@code null}.
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream format(Locale l, String format, Object... args) {
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (format == null) {
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException(Msg.getString("K0351")); //$NON-NLS-1$
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Formatter(this, l).format(format, args);
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a formatted string. The behavior of this method is the same as
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * this stream's {@code #format(String, Object...)} method. For the locale,
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the default value of the current virtual machine instance is used.
3373819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@link java.util.Formatter#format}.
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream printf(String format, Object... args) {
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(format, args);
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a formatted string. The behavior of this method is the same as
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * this stream's {@code #format(Locale, String, Object...)} method.
3603819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param l
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the locale used in the method. No localization will be applied
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            if {@code l} is {@code null}.
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream printf(Locale l, String format, Object... args) {
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(l, format, args);
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Put the line separator String onto the print stream.
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private void newline() {
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(lineSeparator);
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character array
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target stream.
3923819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param charArray
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character array to print to the target stream.
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(char[] charArray) {
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(new String(charArray, 0, charArray.length));
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character to the target
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4043819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param ch
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to print to the target stream.
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(char ch) {
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(ch));
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified double to the target
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4163819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dnum
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the double value to print to the target stream.
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(double dnum) {
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(dnum));
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified float to the target
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fnum
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the float value to print to the target stream.
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
4323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(float fnum) {
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(fnum));
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified integer to the target
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4403819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param inum
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the integer value to print to the target stream.
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
4443819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(int inum) {
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(inum));
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified long to the target
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4523819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param lnum
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the long value to print to the target stream.
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
4563819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(long lnum) {
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(lnum));
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified object to the target
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
4643819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param obj
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to print to the target stream.
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
4683819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(Object obj) {
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(obj));
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a string to the target stream. The string is converted to an array
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of bytes using the encoding chosen during the construction of this
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. The bytes are then written to the target stream with
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code write(int)}.
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If an I/O error occurs, this stream's error state is set to {@code true}.
4803819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param str
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the string to print to the target stream.
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #write(int)
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void print(String str) {
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null) {
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (str == null) {
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print("null"); //$NON-NLS-1$
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (encoding == null) {
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                write(str.getBytes());
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                write(str.getBytes(encoding));
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified boolean to the target
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
5093819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param bool
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the boolean value to print the target stream.
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
5133819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(boolean bool) {
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(bool));
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the system property
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code "line.separator"} to the target stream.
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println() {
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        newline();
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character array
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * followed by the system property {@code "line.separator"} to the target
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
5303819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param charArray
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character array to print to the target stream.
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(char[] charArray) {
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(new String(charArray, 0, charArray.length));
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character followed by
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the system property {@code "line.separator"} to the target stream.
5423819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param ch
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to print to the target stream.
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(char ch) {
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(ch));
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified double followed by the
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
5543819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dnum
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the double value to print to the target stream.
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(double dnum) {
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(dnum));
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified float followed by the
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
5663819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fnum
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the float value to print to the target stream.
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
5703819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   public void println(float fnum) {
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(fnum));
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   /**
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified integer followed by the
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
5783819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param inum
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the integer value to print to the target stream.
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
5833819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(int inum) {
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(inum));
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified long followed by the
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
5913819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param lnum
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the long value to print to the target stream.
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
5963819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(long lnum) {
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(lnum));
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified object followed by the
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
6043819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param obj
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to print to the target stream.
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
6093819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(Object obj) {
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(obj));
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a string followed by the system property {@code "line.separator"}
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target stream. The string is converted to an array of bytes using
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the encoding chosen during the construction of this stream. The bytes are
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * then written to the target stream with {@code write(int)}.
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If an I/O error occurs, this stream's error state is set to {@code true}.
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * </p>
6223819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param str
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the string to print to the target stream.
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #write(int)
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void println(String str) {
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(str);
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        newline();
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified boolean followed by the
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
6363819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param bool
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the boolean value to print to the target stream.
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
6403819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(boolean bool) {
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(bool));
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the error flag of this print stream to {@code true}.
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setError() {
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ioError = true;
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes {@code count} bytes from {@code buffer} starting at {@code offset}
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target stream. If autoflush is set, this stream gets flushed after
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writing the buffer.
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This stream's error flag is set to {@code true} if this stream is closed
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * or an I/O error occurs.
6593819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param buffer
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the buffer to be written.
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param offset
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the first byte in {@code buffer} to write.
66409133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson     * @param length
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the number of bytes in {@code buffer} to write.
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IndexOutOfBoundsException
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code offset < 0} or {@code count < 0}, or if {@code
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             offset + count} is bigger than the length of {@code buffer}.
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #flush()
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
67209133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson    public void write(byte[] buffer, int offset, int length) {
67309133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson        // Force buffer null check first!
67409133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson        if (offset > buffer.length || offset < 0) {
67509133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson            // K002e=Offset out of bounds \: {0}
67609133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson            throw new ArrayIndexOutOfBoundsException(Msg.getString("K002e", offset)); //$NON-NLS-1$
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
67809133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson        if (length < 0 || length > buffer.length - offset) {
67909133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson            // K0031=Length out of bounds \: {0}
68009133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson            throw new ArrayIndexOutOfBoundsException(Msg.getString("K0031", length)); //$NON-NLS-1$
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (this) {
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (out == null) {
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
68809133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson                out.write(buffer, offset, length);
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (autoflush) {
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    flush();
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes one byte to the target stream. Only the least significant byte of
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the integer {@code oneByte} is written. This stream is flushed if
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code oneByte} is equal to the character {@code '\n'} and this stream is
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * set to autoflush.
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This stream's error flag is set to {@code true} if it is closed or an I/O
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * error occurs.
7063819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param oneByte
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the byte to be written
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void write(int oneByte) {
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null) {
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            out.write(oneByte);
71872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson            int b = oneByte & 0xFF;
71972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson            // 0x0A is ASCII newline, 0x15 is EBCDIC newline.
72072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson            boolean isNewline = b == 0x0A || b == 0x15;
72172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson            if (autoflush && isNewline) {
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                flush();
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends the character {@code c} to the target stream. This method works
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the same way as {@link #print(char)}.
7323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param c
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to append to the target stream.
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream append(char c) {
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(c);
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends the character sequence {@code csq} to the target stream. This
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * method works the same way as {@code PrintStream.print(csq.toString())}.
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If {@code csq} is {@code null}, then the string "null" is written to the
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target stream.
7473819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csq
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character sequence appended to the target stream.
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream append(CharSequence csq) {
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (null == csq) {
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(TOKEN_NULL);
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(csq.toString());
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends a subsequence of the character sequence {@code csq} to the target
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. This method works the same way as {@code
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * PrintStream.print(csq.subsequence(start, end).toString())}. If {@code
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * csq} is {@code null}, then the specified subsequence of the string "null"
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * will be written to the target stream.
7673819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csq
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character sequence appended to the target stream.
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param start
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the first char in the character sequence appended
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            to the target stream.
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param end
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the character following the last character of the
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            subsequence appended to the target stream.
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IndexOutOfBoundsException
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code start > end}, {@code start < 0}, {@code end < 0} or
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             either {@code start} or {@code end} are greater or equal than
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             the length of {@code csq}.
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream append(CharSequence csq, int start, int end) {
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (null == csq) {
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(TOKEN_NULL.substring(start, end));
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(csq.subSequence(start, end).toString());
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
791