1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 package org.apache.maven.shared.utils; 20 21 import javax.annotation.Nonnull; 22 23 import java.io.File; 24 import java.io.FileNotFoundException; 25 import java.io.FileOutputStream; 26 import java.io.FileWriter; 27 import java.io.IOException; 28 import java.io.OutputStream; 29 import java.io.OutputStreamWriter; 30 import java.io.UnsupportedEncodingException; 31 import java.io.Writer; 32 33 import org.apache.maven.shared.utils.xml.XmlStreamWriter; 34 35 /** 36 * Utility to create Writers, with explicit encoding choice: platform default, 37 * XML, or specified. 38 * 39 * @author Hervé Boutemy 40 * @see java.nio.charset.Charset 41 * @see <a href="https://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html">Supported encodings</a> 42 */ 43 public class WriterFactory { 44 /** 45 * ISO Latin Alphabet #1, also known as ISO-LATIN-1. 46 * Every implementation of the Java platform is required to support this character encoding. 47 * 48 * @deprecated use {@code java.nio.charset.StandardCharset.ISO_8859_1} 49 */ 50 @Deprecated 51 public static final String ISO_8859_1 = "ISO-8859-1"; 52 53 /** 54 * Seven-bit ASCII, also known as ISO646-US, also known as the Basic Latin block of the Unicode character set. 55 * Every implementation of the Java platform is required to support this character encoding. 56 * 57 * @deprecated use {@code java.nio.charset.StandardCharset.US_ASCII} 58 */ 59 @Deprecated 60 public static final String US_ASCII = "US-ASCII"; 61 62 /** 63 * Sixteen-bit Unicode Transformation Format, byte order specified by a mandatory initial byte-order mark (either 64 * order accepted on input, big-endian used on output). 65 * Every implementation of the Java platform is required to support this character encoding. 66 * 67 * @deprecated use {@code java.nio.charset.StandardCharset.UTF_16} 68 */ 69 @Deprecated 70 public static final String UTF_16 = "UTF-16"; 71 72 /** 73 * Sixteen-bit Unicode Transformation Format, big-endian byte order. 74 * Every implementation of the Java platform is required to support this character encoding. 75 * 76 * @deprecated use {@code java.nio.charset.StandardCharset.UTF_16BE} 77 */ 78 @Deprecated 79 public static final String UTF_16BE = "UTF-16BE"; 80 81 /** 82 * Sixteen-bit Unicode Transformation Format, little-endian byte order. 83 * Every implementation of the Java platform is required to support this character encoding. 84 * 85 * @deprecated use {@code java.nio.charset.StandardCharset.UTF_16LE} 86 */ 87 @Deprecated 88 public static final String UTF_16LE = "UTF-16LE"; 89 90 /** 91 * Eight-bit Unicode Transformation Format. 92 * Every implementation of the Java platform is required to support this character encoding. 93 * 94 * @deprecated use {@code java.nio.charset.StandardCharset.UTF_8} 95 */ 96 @Deprecated 97 public static final String UTF_8 = "UTF-8"; 98 99 /** 100 * The <code>file.encoding</code> System Property. 101 */ 102 public static final String FILE_ENCODING = System.getProperty("file.encoding"); 103 104 /** 105 * Create a new Writer with XML encoding detection rules. 106 * 107 * @param out not null output stream 108 * @return an XML writer instance for the output stream 109 * @throws IOException if any 110 * @see XmlStreamWriter 111 * @deprecated use org.apache.commons.io.input.XmlStreamWriter instead 112 */ 113 @Deprecated 114 public static XmlStreamWriter newXmlWriter(@Nonnull OutputStream out) throws IOException { 115 return new XmlStreamWriter(out); 116 } 117 118 /** 119 * Create a new Writer with XML encoding detection rules. 120 * 121 * @param file not null file 122 * @return an XML writer instance for the output file 123 * @throws IOException if any 124 * @see XmlStreamWriter 125 * @deprecated use org.apache.commons.io.input.XmlStreamWriter instead 126 */ 127 @Deprecated 128 public static XmlStreamWriter newXmlWriter(@Nonnull File file) throws IOException { 129 return new XmlStreamWriter(file); 130 } 131 132 /** 133 * Create a new Writer with default platform encoding. 134 * 135 * @param out not null output stream 136 * @return a writer instance for the output stream using the default platform charset 137 * @deprecated always specify an encoding. Do not depend on the default platform character set. 138 */ 139 @Deprecated 140 public static Writer newPlatformWriter(@Nonnull OutputStream out) { 141 return new OutputStreamWriter(out); 142 } 143 144 /** 145 * Create a new Writer with default platform encoding. 146 * 147 * @param file not null file 148 * @return a writer instance for the output file using the default platform charset 149 * @throws IOException if any 150 * @deprecated always specify an encoding. Do not depend on the default platform character set. 151 */ 152 @Deprecated 153 public static Writer newPlatformWriter(@Nonnull File file) throws IOException { 154 return new FileWriter(file); 155 } 156 157 /** 158 * Create a new Writer with specified encoding. 159 * 160 * @param out not null output stream 161 * @param encoding not null supported encoding 162 * @return a writer instance for the output stream using the given encoding 163 * @throws UnsupportedEncodingException if any 164 * @see <a href="https://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html">Supported 165 * encodings</a> 166 */ 167 public static Writer newWriter(@Nonnull OutputStream out, @Nonnull String encoding) 168 throws UnsupportedEncodingException { 169 return new OutputStreamWriter(out, encoding); 170 } 171 172 /** 173 * Create a new Writer with specified encoding. 174 * 175 * @param file not null file 176 * @param encoding not null supported encoding 177 * @return a writer instance for the output file using the given encoding 178 * @throws UnsupportedEncodingException if any 179 * @throws FileNotFoundException if any 180 * @see <a href="https://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html">Supported 181 * encodings</a> 182 */ 183 public static Writer newWriter(@Nonnull File file, @Nonnull String encoding) 184 throws UnsupportedEncodingException, FileNotFoundException { 185 return newWriter(new FileOutputStream(file), encoding); 186 } 187 }