--- old/src/java.base/share/classes/java/io/FileWriter.java 2018-03-05 13:24:45.527057775 -0800 +++ new/src/java.base/share/classes/java/io/FileWriter.java 2018-03-05 13:24:45.246031630 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,22 +25,24 @@ package java.io; +import java.nio.charset.Charset; /** - * Convenience class for writing character files. The constructors of this - * class assume that the default character encoding and the default byte-buffer - * size are acceptable. To specify these values yourself, construct an - * OutputStreamWriter on a FileOutputStream. + * Writes text to character files using a default buffer size. Encoding from characters + * to bytes uses either a specified {@linkplain java.nio.charset.Charset charset} + * or the platform's + * {@linkplain java.nio.charset.Charset#defaultCharset() default charset}. * - *

Whether or not a file is available or may be created depends upon the + *

+ * Whether or not a file is available or may be created depends upon the * underlying platform. Some platforms, in particular, allow a file to be * opened for writing by only one {@code FileWriter} (or other file-writing * object) at a time. In such situations the constructors in this class * will fail if the file involved is already open. * - *

{@code FileWriter} is meant for writing streams of characters. - * For writing streams of raw bytes, consider using a - * {@code FileOutputStream}. + *

+ * The {@code FileWriter} is meant for writing streams of characters. For writing + * streams of raw bytes, consider using a {@code FileOutputStream}. * * @see OutputStreamWriter * @see FileOutputStream @@ -52,7 +54,8 @@ public class FileWriter extends OutputStreamWriter { /** - * Constructs a FileWriter object given a file name. + * Constructs a {@code FileWriter} given a file name, using the platform's + * {@linkplain java.nio.charset.Charset#defaultCharset() default charset} * * @param fileName String The system-dependent filename. * @throws IOException if the named file exists but is a directory rather @@ -64,8 +67,9 @@ } /** - * Constructs a FileWriter object given a file name with a boolean - * indicating whether or not to append the data written. + * Constructs a {@code FileWriter} given a file name and a boolean indicating + * whether to append the data written, using the platform's + * {@linkplain java.nio.charset.Charset#defaultCharset() default charset}. * * @param fileName String The system-dependent filename. * @param append boolean if {@code true}, then data will be written @@ -79,9 +83,11 @@ } /** - * Constructs a FileWriter object given a File object. + * Constructs a {@code FileWriter} given the {@code File} to write, + * using the platform's + * {@linkplain java.nio.charset.Charset#defaultCharset() default charset} * - * @param file a File object to write to. + * @param file the {@code File} to write. * @throws IOException if the file exists but is a directory rather than * a regular file, does not exist but cannot be created, * or cannot be opened for any other reason @@ -91,11 +97,11 @@ } /** - * Constructs a FileWriter object given a File object. If the second - * argument is {@code true}, then bytes will be written to the end - * of the file rather than the beginning. + * Constructs a {@code FileWriter} given the {@code File} to write and + * a boolean indicating whether to append the data written, using the platform's + * {@linkplain java.nio.charset.Charset#defaultCharset() default charset}. * - * @param file a File object to write to + * @param file the {@code File} to write * @param append if {@code true}, then bytes will be written * to the end of the file rather than the beginning * @throws IOException if the file exists but is a directory rather than @@ -108,12 +114,83 @@ } /** - * Constructs a FileWriter object associated with a file descriptor. + * Constructs a {@code FileWriter} given a file descriptor, + * using the platform's + * {@linkplain java.nio.charset.Charset#defaultCharset() default charset}. * - * @param fd FileDescriptor object to write to. + * @param fd the {@code FileDescriptor} to write. */ public FileWriter(FileDescriptor fd) { super(new FileOutputStream(fd)); } + + /** + * Constructs a {@code FileWriter} given a file name and + * {@linkplain java.nio.charset.Charset charset}. + * + * @param fileName the name of the file to write + * @param charset the {@linkplain java.nio.charset.Charset charset} + * @throws IOException if the named file exists but is a directory rather + * than a regular file, does not exist but cannot be + * created, or cannot be opened for any other reason + * + * @since 11 + */ + public FileWriter(String fileName, Charset charset) throws IOException { + super(new FileOutputStream(fileName), charset); + } + + /** + * Constructs a {@code FileWriter} given a file name, + * {@linkplain java.nio.charset.Charset charset} and a boolean indicating + * whether to append the data written. + * + * @param fileName the name of the file to write + * @param charset the {@linkplain java.nio.charset.Charset charset} + * @param append a boolean. If {@code true}, the writer will write the data + * to the end of the file rather than the beginning. + * @throws IOException if the named file exists but is a directory rather + * than a regular file, does not exist but cannot be + * created, or cannot be opened for any other reason + * + * @since 11 + */ + public FileWriter(String fileName, Charset charset, boolean append) throws IOException { + super(new FileOutputStream(fileName, append), charset); + } + + /** + * Constructs a {@code FileWriter} given the {@code File} to write and + * {@linkplain java.nio.charset.Charset charset}. + * + * @param file the {@code File} to write + * @param charset the {@linkplain java.nio.charset.Charset charset} + * @throws IOException if the file exists but is a directory rather than + * a regular file, does not exist but cannot be created, + * or cannot be opened for any other reason + * + * @since 11 + */ + public FileWriter(File file, Charset charset) throws IOException { + super(new FileOutputStream(file), charset); + } + + /** + * Constructs a {@code FileWriter} given the {@code File} to write, + * {@linkplain java.nio.charset.Charset charset} and a boolean indicating + * whether to append the data written. + * + * @param file the {@code File} to write + * @param charset the {@linkplain java.nio.charset.Charset charset} + * @param append a boolean. If {@code true}, the writer will write the data + * to the end of the file rather than the beginning. + * @throws IOException if the file exists but is a directory rather than + * a regular file, does not exist but cannot be created, + * or cannot be opened for any other reason + * @since 11 + */ + public FileWriter(File file, Charset charset, boolean append) throws IOException { + super(new FileOutputStream(file, append), charset); + } }