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.security.AccessController;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Formatter;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.IllegalFormatException;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Locale;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.util.Msg;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.util.PriviAction;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Wraps either an existing {@link OutputStream} or an existing {@link Writer}
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and provides convenience methods for printing common data types in a human
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * readable format. No {@code IOException} is thrown by this class. Instead,
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * callers should use {@link #checkError()} to see if a problem has occurred in
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this writer.
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class PrintWriter extends Writer {
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The writer to print data to.
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected Writer out;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates whether this PrintWriter is in an error state.
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private boolean ioError;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates whether or not this PrintWriter should flush its contents after
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * printing a new line.
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private boolean autoflush;
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final String lineSeparator = AccessController
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            .doPrivileged(new PriviAction<String>("line.separator")); //$NON-NLS-1$
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintWriter} with {@code out} as its target
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. By default, the new print writer does not automatically flush its
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * contents to the target stream when a newline is encountered.
593819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param out
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target output stream.
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code out} is {@code null}.
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter(OutputStream out) {
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(new OutputStreamWriter(out), false);
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintWriter} with {@code out} as its target
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * stream. The parameter {@code autoflush} determines if the print writer
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * automatically flushes its contents to the target stream when a newline is
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * encountered.
743819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param out
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target output stream.
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param autoflush
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            indicates whether contents are flushed upon encountering a
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            newline sequence.
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code out} is {@code null}.
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter(OutputStream out, boolean autoflush) {
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(new OutputStreamWriter(out), autoflush);
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintWriter} with {@code wr} as its target
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writer. By default, the new print writer does not automatically flush its
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * contents to the target writer when a newline is encountered.
913819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param wr
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target writer.
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code wr} is {@code null}.
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter(Writer wr) {
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(wr, false);
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintWriter} with {@code out} as its target
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writer. The parameter {@code autoflush} determines if the print writer
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * automatically flushes its contents to the target writer when a newline is
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * encountered.
1063819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param wr
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target writer.
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param autoflush
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            indicates whether to flush contents upon encountering a
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            newline sequence.
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code out} is {@code null}.
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter(Writer wr, boolean autoflush) {
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(wr);
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.autoflush = autoflush;
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out = wr;
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintWriter} with {@code file} as its target. The
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * virtual machine's default character set is used for character encoding.
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The print writer does not automatically flush its contents to the target
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * file when a newline is encountered. The output to the file is buffered.
1263819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param file
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file. If the file already exists, its contents are
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            removed, otherwise a new file is created.
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter(File file) throws FileNotFoundException {
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // BEGIN android-modified
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(new OutputStreamWriter(
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                     new BufferedOutputStream(
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                             new FileOutputStream(file), 8192)),
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                false);
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // END android-modified
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintWriter} with {@code file} as its target. The
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * character set named {@code csn} is used for character encoding.
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The print writer does not automatically flush its contents to the target
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * file when a newline is encountered. The output to the file is buffered.
1503819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param file
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file. If the file already exists, its contents are
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            removed, otherwise a new file is created.
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csn
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the name of the character set used for character encoding.
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code csn} is {@code null}.
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws UnsupportedEncodingException
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the encoding specified by {@code csn} is not supported.
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter(File file, String csn) throws FileNotFoundException,
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            UnsupportedEncodingException {
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // BEGIN android-modified
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(new OutputStreamWriter(
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                     new BufferedOutputStream(
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                             new FileOutputStream(file), 8192), csn),
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                false);
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // END android-modified
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintWriter} with the file identified by {@code
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fileName} as its target. The virtual machine's default character set is
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * used for character encoding. The print writer does not automatically
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * flush its contents to the target file when a newline is encountered. The
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * output to the file is buffered.
1823819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fileName
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file's name. If the file already exists, its
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            contents are removed, otherwise a new file is created.
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter(String fileName) throws FileNotFoundException {
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // BEGIN android-modified
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(new OutputStreamWriter(
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                     new BufferedOutputStream(
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                             new FileOutputStream(fileName), 8192)),
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                false);
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // END android-modified
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     /**
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a new {@code PrintWriter} with the file identified by {@code
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * fileName} as its target. The character set named {@code csn} is used for
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * character encoding. The print writer does not automatically flush its
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * contents to the target file when a newline is encountered. The output to
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the file is buffered.
2073819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fileName
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target file's name. If the file already exists, its
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            contents are removed, otherwise a new file is created.
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csn
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the name of the character set used for character encoding.
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws FileNotFoundException
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if an error occurs while opening or creating the target file.
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code csn} is {@code null}.
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws SecurityException
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if a security manager exists and it denies writing to the
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             target file.
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws UnsupportedEncodingException
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the encoding specified by {@code csn} is not supported.
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter(String fileName, String csn)
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws FileNotFoundException, UnsupportedEncodingException {
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // BEGIN android-modified
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(new OutputStreamWriter(
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                     new BufferedOutputStream(
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                             new FileOutputStream(fileName), 8192), csn),
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                false);
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // END android-modified
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Flushes this writer and returns the value of the error flag.
2353819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return {@code true} if either an {@code IOException} has been thrown
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         previously or if {@code setError()} has been called;
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         {@code false} otherwise.
2393819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     * @see #setError()
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean checkError() {
24272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson        Writer delegate = out;
24372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson        if (delegate == null) {
24472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson            return ioError;
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
24672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson
24772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson        flush();
24872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson        return ioError || delegate.checkError();
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Closes this print writer. Flushes this writer and then closes the target.
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If an I/O error occurs, this writer's error flag is set to {@code true}.
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void close() {
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (lock) {
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (out != null) {
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    out.close();
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (IOException e) {
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    setError();
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out = null;
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Ensures that all pending data is sent out to the target. It also
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * flushes the target. If an I/O error occurs, this writer's error
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * state is set to {@code true}.
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void flush() {
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (lock) {
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (out != null) {
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    out.flush();
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (IOException e) {
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    setError();
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes a string formatted by an intermediate {@code Formatter} to the
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target using the specified format string and arguments. For the locale,
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the default value of the current virtual machine instance is used. If
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * automatic flushing is enabled then the buffer is flushed as well.
2943819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this writer.
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter format(String format, Object... args) {
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(Locale.getDefault(), format, args);
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes a string formatted by an intermediate {@code Formatter} to the
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target using the specified locale, format string and arguments. If
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * automatic flushing is enabled then this writer is flushed.
3173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param l
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the locale used in the method. No localization will be applied
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            if {@code l} is {@code null}.
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this writer.
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter format(Locale l, String format, Object... args) {
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (format == null) {
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException(Msg.getString("K0351")); //$NON-NLS-1$
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Formatter(this, l).format(format, args);
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (autoflush) {
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            flush();
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a formatted string. The behavior of this method is the same as
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * this writer's {@code #format(String, Object...)} method. For the locale,
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the default value of the current virtual machine instance is used.
3503819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this writer.
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter printf(String format, Object... args) {
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(format, args);
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a formatted string. The behavior of this method is the same as
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * this writer's {@code #format(Locale, String, Object...)} method.
3723819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param l
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the locale used in the method. No localization will be applied
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            if {@code l} is {@code null}.
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param format
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the format string used for {@link java.util.Formatter#format}.
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param args
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the list of arguments passed to the formatter. If there are
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            more arguments than required by the {@code format} string,
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            then the additional arguments are ignored.
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this writer.
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalFormatException
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the format string is illegal or incompatible with the
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             arguments, if there are not enough arguments or if any other
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             error regarding the format string or arguments is detected.
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code format} is {@code null}.
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter printf(Locale l, String format, Object... args) {
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return format(l, format, args);
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character array
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target.
3973819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param charArray
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character array to print to the target.
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(char[] charArray) {
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(new String(charArray, 0, charArray.length));
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character to the
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target.
4093819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param ch
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to print to the target.
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(char ch) {
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(ch));
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified double to the target.
4203819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dnum
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the double value to print to the target.
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(double dnum) {
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(dnum));
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson    /**
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified float to the target.
4313819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fnum
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the float value to print to the target.
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(float fnum) {
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(fnum));
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified integer to the target.
4423819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param inum
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the integer value to print to the target.
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
4463819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(int inum) {
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(inum));
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 long to the target.
4533819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param lnum
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the long value to print to the target.
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(long lnum) {
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(lnum));
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified object to the target.
4643819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param obj
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to print to the target.
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. The string is converted to an array of
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * bytes using the encoding chosen during the construction of this writer.
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The bytes are then written to the target with {@code write(int)}.
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If an I/O error occurs, this writer's error flag is set to {@code true}.
4793819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param str
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the string to print to the target.
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #write(int)
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(String str) {
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        write(str != null ? str : String.valueOf((Object) null));
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified boolean to the target.
4903819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param bool
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the boolean value to print the target.
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
4943819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void print(boolean bool) {
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        print(String.valueOf(bool));
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the system property {@code
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * "line.separator"} to the target. Flushes this writer if the autoflush
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * flag is set to {@code true}.
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println() {
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (lock) {
50672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson            print(lineSeparator);
50772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson            if (autoflush) {
50872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson                flush();
50972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson            }
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified character array
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * followed by the system property {@code "line.separator"} to the target.
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Flushes this writer if the autoflush flag is set to {@code true}.
5173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param charArray
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character array to print to the target.
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(char[] charArray) {
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(new String(charArray, 0, charArray.length));
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 followed by
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the system property {@code "line.separator"} to the target. Flushes this
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writer if the autoflush flag is set to {@code true}.
5303819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param ch
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to print to the target.
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(char ch) {
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(ch));
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 double followed by the
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target. Flushes this
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writer if the autoflush flag is set to {@code true}.
5433819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dnum
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the double value to print to the target.
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(double dnum) {
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(dnum));
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified float followed by the
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target. Flushes this
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writer if the autoflush flag is set to {@code true}.
5563819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param fnum
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the float value to print to the target.
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
5603819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(float fnum) {
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(fnum));
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified integer followed by the
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target. Flushes this
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writer if the autoflush flag is set to {@code true}.
5693819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param inum
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the integer value to print to the target.
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
5733819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(int inum) {
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(inum));
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified long followed by the
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target. Flushes this
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writer if the autoflush flag is set to {@code true}.
5823819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param lnum
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the long value to print to the target.
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
5863819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(long lnum) {
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(lnum));
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified object followed by the
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target. Flushes this
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writer if the autoflush flag is set to {@code true}.
5953819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param obj
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to print to the target.
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
5993819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(Object obj) {
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(obj));
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints a string followed by the system property {@code "line.separator"}
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target. The string is converted to an array of bytes using the
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * encoding chosen during the construction of this writer. The bytes are
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * then written to the target with {@code write(int)}. Finally, this writer
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * is flushed if the autoflush flag is set to {@code true}.
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If an I/O error occurs, this writer's error flag is set to {@code true}.
6123819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param str
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the string to print to the target.
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #write(int)
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(String str) {
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (lock) {
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            print(str);
62072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson            println();
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prints the string representation of the specified boolean followed by the
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * system property {@code "line.separator"} to the target. Flushes this
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * writer if the autoflush flag is set to {@code true}.
6283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param bool
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the boolean value to print to the target.
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #print(String)
6323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     */
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void println(boolean bool) {
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        println(String.valueOf(bool));
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the error flag of this writer to {@code true}.
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setError() {
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (lock) {
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ioError = true;
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the character buffer {@code buf} to the target.
6483819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param buf
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the non-null array containing characters to write.
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void write(char[] buf) {
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // BEGIN android-note
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // changed array notation to be consistent with the rest of harmony
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // END android-note
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        write(buf, 0, buf.length);
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes {@code count} characters from {@code buffer} starting at {@code
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * offset} to the target.
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This writer's error flag is set to {@code true} if this writer is closed
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * or an I/O error occurs.
6663819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param buf
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the buffer to write to the target.
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param offset
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the first character in {@code buffer} to write.
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param count
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the number of characters in {@code buffer} to write.
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IndexOutOfBoundsException
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code offset < 0} or {@code count < 0}, or if {@code
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             offset + count} is greater than the length of {@code buf}.
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void write(char[] buf, int offset, int count) {
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // BEGIN android-note
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // changed array notation to be consistent with the rest of harmony
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // END android-note
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        doWrite(buf, offset, count);
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes one character to the target. Only the two least significant bytes
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of the integer {@code oneChar} are written.
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This writer's error flag is set to {@code true} if this writer is closed
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * or an I/O error occurs.
6913819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param oneChar
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to write to the target.
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void write(int oneChar) {
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        doWrite(new char[] { (char) oneChar }, 0, 1);
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final void doWrite(char[] buf, int offset, int count) {
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // BEGIN android-note
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // changed array notation to be consistent with the rest of harmony
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // END android-note
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (lock) {
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (out != null) {
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                try {
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    out.write(buf, offset, count);
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                } catch (IOException e) {
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    setError();
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } else {
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setError();
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the characters from the specified string to the target.
7193819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param str
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the non-null string containing the characters to write.
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void write(String str) {
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        write(str.toCharArray());
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes {@code count} characters from {@code str} starting at {@code
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * offset} to the target.
7313819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param str
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the non-null string containing the characters to write.
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param offset
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the first character in {@code str} to write.
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param count
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the number of characters from {@code str} to write.
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IndexOutOfBoundsException
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code offset < 0} or {@code count < 0}, or if {@code
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             offset + count} is greater than the length of {@code str}.
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void write(String str, int offset, int count) {
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        write(str.substring(offset, offset + count).toCharArray());
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
7483819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     * Appends the character {@code c} to the target.
7493819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param c
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character to append to the target.
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this writer.
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter append(char c) {
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        write(c);
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends the character sequence {@code csq} to the target. This
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * method works the same way as {@code PrintWriter.print(csq.toString())}.
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If {@code csq} is {@code null}, then the string "null" is written
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the target.
7653819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csq
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character sequence appended to the target.
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this writer.
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter append(CharSequence csq) {
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (null == csq) {
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            append(TOKEN_NULL, 0, TOKEN_NULL.length());
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            append(csq, 0, csq.length());
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Appends a subsequence of the character sequence {@code csq} to the
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * target. This method works the same way as {@code
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * PrintWriter.print(csq.subsequence(start, end).toString())}. If {@code
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * csq} is {@code null}, then the specified subsequence of the string "null"
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * will be written to the target.
7863819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson     *
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param csq
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the character sequence appended to the target.
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param start
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the first char in the character sequence appended
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            to the target.
792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param end
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index of the character following the last character of the
794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            subsequence appended to the target.
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this writer.
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws StringIndexOutOfBoundsException
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code start > end}, {@code start < 0}, {@code end < 0} or
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             either {@code start} or {@code end} are greater or equal than
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             the length of {@code csq}.
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @Override
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public PrintWriter append(CharSequence csq, int start, int end) {
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (null == csq) {
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            csq = TOKEN_NULL;
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String output = csq.subSequence(start, end).toString();
807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        write(output, 0, output.length());
808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
811