PrintStream.java revision f6c387128427e121477c1b32ad35cdcaa5101ba3
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;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.AccessController;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Formatter;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.IllegalFormatException;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Locale;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.util.Msg;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.util.PriviAction;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Wraps an existing {@link OutputStream} and provides convenience methods for
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * writing common data types in a human readable format. This is not to be
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * confused with DataOutputStream which is used for encoding common data types
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * so that they can be read back in. No {@code IOException} is thrown by this
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * class. Instead, callers should use {@link #checkError()} to see if a problem
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * has occurred in this stream.
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class PrintStream extends FilterOutputStream implements Appendable,
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Closeable {
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static final String TOKEN_NULL = "null"; //$NON-NLS-1$
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * indicates whether or not this PrintStream has incurred an error.
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private boolean ioError;
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * indicates whether or not this PrintStream should flush its contents after
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * printing a new line.
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private boolean autoflush;
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private String encoding;
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final String lineSeparator = AccessController
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // private Formatter formatter;
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with {@code out} as its target
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. By default, the new print stream does not automatically flush its
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * contents to the target stream when a newline is encountered.
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param out
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target output stream.
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code out} is {@code null}.
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(OutputStream out) {
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(out);
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null) {
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with {@code out} as its target
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. The parameter {@code autoflush} determines if the print stream
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * automatically flushes its contents to the target stream when a newline is
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * encountered.
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param out
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target output stream.
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param autoflush
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            indicates whether to flush contents upon encountering a
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            newline sequence.
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code out} is {@code null}.
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(OutputStream out, boolean autoflush) {
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(out);
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null) {
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.autoflush = autoflush;
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with {@code out} as its target
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream and using the character encoding {@code enc} while writing. The
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * parameter {@code autoflush} determines if the print stream automatically
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * flushes its contents to the target stream when a newline is encountered.
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param out
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target output stream.
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param autoflush
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            indicates whether or not to flush contents upon encountering a
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            newline sequence.
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param enc
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the non-null string describing the desired character encoding.
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code out} or {@code enc} are {@code null}.
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws UnsupportedEncodingException
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the encoding specified by {@code enc} is not supported.
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(OutputStream out, boolean autoflush, String enc)
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws UnsupportedEncodingException {
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(out);
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null || enc == null) {
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.autoflush = autoflush;
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!Charset.isSupported(enc)) {
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.
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
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     * @since Android 1.0
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(File file) throws FileNotFoundException {
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(new FileOutputStream(file));
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with {@code file} as its target. The
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * character set named {@code csn} is used for character encoding.
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param file
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file. If the file already exists, its contents are
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            removed, otherwise a new file is created.
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csn
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the name of the character set used for character encoding.
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code csn} is {@code null}.
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws UnsupportedEncodingException
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the encoding specified by {@code csn} is not supported.
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(File file, String csn) throws FileNotFoundException,
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            UnsupportedEncodingException {
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(new FileOutputStream(file));
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (csn == null) {
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!Charset.isSupported(csn)) {
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new UnsupportedEncodingException();
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encoding = csn;
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with the file identified by
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code fileName} as its target. The virtual machine's default character
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * set is used for character encoding.
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fileName
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file's name. If the file already exists, its
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            contents are removed, otherwise a new file is created.
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(String fileName) throws FileNotFoundException {
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(new File(fileName));
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintStream} with the file identified by
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code fileName} as its target. The character set named {@code csn} is
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * used for character encoding.
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fileName
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file's name. If the file already exists, its
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            contents are removed, otherwise a new file is created.
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csn
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the name of the character set used for character encoding.
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code csn} is {@code null}.
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws UnsupportedEncodingException
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the encoding specified by {@code csn} is not supported.
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream(String fileName, String csn)
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws FileNotFoundException, UnsupportedEncodingException {
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(new File(fileName), csn);
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Flushes this stream and returns the value of the error flag.
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return {@code true} if either an {@code IOException} has been thrown
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         previously or if {@code setError()} has been called;
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         {@code false} otherwise.
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #setError()
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean checkError() {
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out != null) {
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            flush();
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return ioError;
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Closes this print stream. Flushes this stream and then closes the target
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. If an I/O error occurs, this stream's error state is set to
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code true}.
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void close() {
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        flush();
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out != null) {
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out.close();
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out = null;
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Ensures that all pending data is sent out to the target stream. It also
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * flushes the target stream. If an I/O error occurs, this stream's error
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * state is set to {@code true}.
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void flush() {
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out != null) {
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out.flush();
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // Ignored, fall through to setError
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setError();
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes a string formatted by an intermediate {@code Formatter} to the
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target stream using the specified format string and arguments. For the
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * locale, the default value of the current virtual machine instance is
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * used.
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream format(String format, Object... args) {
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(Locale.getDefault(), format, args);
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes a string formatted by an intermediate {@link Formatter} to this
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream using the specified locale, format string and arguments.
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param l
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the locale used in the method. No localization will be applied
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            if {@code l} is {@code null}.
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream format(Locale l, String format, Object... args) {
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (format == null) {
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException(Msg.getString("K0351")); //$NON-NLS-1$
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Formatter(this, l).format(format, args);
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a formatted string. The behavior of this method is the same as
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * this stream's {@code #format(String, Object...)} method. For the locale,
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the default value of the current virtual machine instance is used.
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@link java.util.Formatter#format}.
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream printf(String format, Object... args) {
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(format, args);
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a formatted string. The behavior of this method is the same as
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * this stream's {@code #format(Locale, String, Object...)} method.
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param l
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the locale used in the method. No localization will be applied
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            if {@code l} is {@code null}.
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream printf(Locale l, String format, Object... args) {
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(l, format, args);
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Put the line separator String onto the print stream.
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private void newline() {
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(lineSeparator);
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character array
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target stream.
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param charArray
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character array to print to the target stream.
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(char[] charArray) {
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(new String(charArray, 0, charArray.length));
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character to the target
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param ch
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to print to the target stream.
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(char ch) {
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(ch));
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 double to the target
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dnum
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the double value to print to the target stream.
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(double dnum) {
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(dnum));
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified float to the target
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fnum
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the float value to print to the target stream.
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(float fnum) {
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(fnum));
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified integer to the target
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param inum
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the integer value to print to the target stream.
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(int inum) {
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(inum));
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified long to the target
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param lnum
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the long value to print to the target stream.
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(long lnum) {
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(lnum));
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified object to the target
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param obj
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to print to the target stream.
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(Object obj) {
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(obj));
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a string to the target stream. The string is converted to an array
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of bytes using the encoding chosen during the construction of this
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. The bytes are then written to the target stream with
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code write(int)}.
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If an I/O error occurs, this stream's error state is set to {@code true}.
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * </p>
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param str
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the string to print to the target stream.
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #write(int)
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void print(String str) {
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null) {
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (str == null) {
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print("null"); //$NON-NLS-1$
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (encoding == null) {
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                write(str.getBytes());
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                write(str.getBytes(encoding));
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified boolean to the target
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param bool
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the boolean value to print the target stream.
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(boolean bool) {
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(bool));
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the system property
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code "line.separator"} to the target stream.
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println() {
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        newline();
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 character array
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * followed by the system property {@code "line.separator"} to the target
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream.
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param charArray
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character array to print to the target stream.
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(char[] charArray) {
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(new String(charArray, 0, charArray.length));
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character followed by
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the system property {@code "line.separator"} to the target stream.
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param ch
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to print to the target stream.
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(char ch) {
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(ch));
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 double followed by the
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dnum
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the double value to print to the target stream.
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(double dnum) {
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(dnum));
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 float followed by the
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fnum
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the float value to print to the target stream.
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project   public void println(float fnum) {
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(fnum));
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 integer followed by the
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param inum
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the integer value to print to the target stream.
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(int inum) {
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(inum));
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified long followed by the
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param lnum
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the long value to print to the target stream.
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(long lnum) {
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(lnum));
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified object followed by the
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param obj
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to print to the target stream.
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(Object obj) {
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(obj));
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a string followed by the system property {@code "line.separator"}
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target stream. The string is converted to an array of bytes using
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the encoding chosen during the construction of this stream. The bytes are
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * then written to the target stream with {@code write(int)}.
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If an I/O error occurs, this stream's error state is set to {@code true}.
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * </p>
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param str
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the string to print to the target stream.
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #write(int)
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void println(String str) {
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(str);
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        newline();
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified boolean followed by the
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target stream.
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param bool
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the boolean value to print to the target stream.
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(boolean bool) {
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(bool));
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the error flag of this print stream to {@code true}.
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setError() {
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ioError = true;
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes {@code count} bytes from {@code buffer} starting at {@code offset}
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target stream. If autoflush is set, this stream gets flushed after
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writing the buffer.
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This stream's error flag is set to {@code true} if this stream is closed
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * or an I/O error occurs.
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * </p>
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param buffer
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the buffer to be written.
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param offset
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the first byte in {@code buffer} to write.
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param count
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the number of bytes in {@code buffer} to write.
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IndexOutOfBoundsException
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code offset < 0} or {@code count < 0}, or if {@code
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             offset + count} is bigger than the length of {@code buffer}.
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #flush()
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void write(byte[] buffer, int offset, int count) {
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // BEGIN android-changed
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (buffer == null) {
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException(Msg.getString("K0047")); //$NON-NLS-1$
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // avoid int overflow
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Exception priorities (in case of multiple errors) differ from
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // RI, but are spec-compliant.
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // removed redundant check, used (offset | count) < 0
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // instead of (offset < 0) || (count < 0) to safe one operation
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if ((offset | count) < 0 || count > buffer.length - offset) {
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new ArrayIndexOutOfBoundsException(Msg.getString("K002f")); //$NON-NLS-1$
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // END android-changed
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (this) {
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (out == null) {
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return;
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out.write(buffer, offset, count);
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (autoflush) {
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    flush();
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IOException e) {
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes one byte to the target stream. Only the least significant byte of
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the integer {@code oneByte} is written. This stream is flushed if
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code oneByte} is equal to the character {@code '\n'} and this stream is
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * set to autoflush.
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This stream's error flag is set to {@code true} if it is closed or an I/O
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * error occurs.
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * </p>
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param oneByte
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the byte to be written
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void write(int oneByte) {
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (out == null) {
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return;
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            out.write(oneByte);
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (autoflush && (oneByte & 0xFF) == '\n') {
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                flush();
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setError();
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends the character {@code c} to the target stream. This method works
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the same way as {@link #print(char)}.
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param c
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to append to the target stream.
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream append(char c) {
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(c);
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends the character sequence {@code csq} to the target stream. This
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * method works the same way as {@code PrintStream.print(csq.toString())}.
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If {@code csq} is {@code null}, then the string "null" is written to the
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target stream.
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csq
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character sequence appended to the target stream.
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream append(CharSequence csq) {
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (null == csq) {
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(TOKEN_NULL);
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(csq.toString());
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends a subsequence of the character sequence {@code csq} to the target
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. This method works the same way as {@code
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * PrintStream.print(csq.subsequence(start, end).toString())}. If {@code
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * csq} is {@code null}, then the specified subsequence of the string "null"
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * will be written to the target stream.
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csq
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character sequence appended to the target stream.
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param start
807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the first char in the character sequence appended
808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            to the target stream.
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param end
810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the character following the last character of the
811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            subsequence appended to the target stream.
812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this stream.
813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IndexOutOfBoundsException
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code start > end}, {@code start < 0}, {@code end < 0} or
815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             either {@code start} or {@code end} are greater or equal than
816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             the length of {@code csq}.
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintStream append(CharSequence csq, int start, int end) {
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (null == csq) {
821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(TOKEN_NULL.substring(start, end));
822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(csq.subSequence(start, end).toString());
824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
828