This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git
The following commit(s) were added to refs/heads/master by this push:
new fb78f68f Add AbstractStreamBuilder.setOpenOptions(OpenOption...)
fb78f68f is described below
commit fb78f68fc4edae1290f609b9ade0cba0cee52d6f
Author: Gary Gregory <[email protected]>
AuthorDate: Fri May 19 17:28:39 2023 -0400
Add AbstractStreamBuilder.setOpenOptions(OpenOption...)
---
src/changes/changes.xml | 3 +
.../apache/commons/io/build/AbstractOrigin.java | 4 +-
.../commons/io/build/AbstractStreamBuilder.java | 74 ++++++++++++++++++++++
.../apache/commons/io/input/BOMInputStream.java | 8 +--
.../input/MessageDigestCalculatingInputStream.java | 8 +--
.../commons/io/input/ReadAheadInputStream.java | 8 +--
.../io/input/UncheckedFilterInputStream.java | 8 +--
.../input/UnsynchronizedBufferedInputStream.java | 8 +--
.../io/input/UnsynchronizedFilterInputStream.java | 8 +--
.../apache/commons/io/input/XmlStreamReader.java | 10 ++-
.../io/output/UncheckedFilterOutputStream.java | 8 +--
.../commons/io/output/UncheckedFilterWriter.java | 9 +--
.../commons/io/output/WriterOutputStream.java | 8 +--
.../apache/commons/io/output/XmlStreamWriter.java | 8 +--
.../input/BufferedFileChannelInputStreamTest.java | 4 +-
.../io/input/RandomAccessFileInputStreamTest.java | 24 +++++--
.../commons/io/input/ReadAheadInputStreamTest.java | 4 +-
.../commons/io/input/XmlStreamReaderTest.java | 11 ++++
.../commons/io/output/WriterOutputStreamTest.java | 2 +
19 files changed, 152 insertions(+), 65 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 02eb6b01..25df6a24 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -56,6 +56,9 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="ggregory" type="fix" due-to="Gary Gregory">
Add CharSequenceInputStream.Builder.
</action>
+ <action dev="ggregory" type="fix" due-to="Gary Gregory">
+ Add AbstractStreamBuilder.setOpenOptions(OpenOption...).
+ </action>
<!-- UPDATE -->
</release>
<release version="2.12.0" date="2023-05-13" description="Java 8 required.">
diff --git a/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
b/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
index eadbb246..d2749b0e 100644
--- a/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
+++ b/src/main/java/org/apache/commons/io/build/AbstractOrigin.java
@@ -293,7 +293,7 @@ public abstract class AbstractOrigin<T, B extends
AbstractOrigin<T, B>> extends
* @throws UnsupportedOperationException if this method is not implemented
in a concrete subclass.
*/
public File getFile() {
- throw new UnsupportedOperationException(origin.toString());
+ throw new UnsupportedOperationException("getFile() from " +
origin.toString());
}
/**
@@ -327,7 +327,7 @@ public abstract class AbstractOrigin<T, B extends
AbstractOrigin<T, B>> extends
* @throws UnsupportedOperationException if this method is not implemented
in a concrete subclass.
*/
public Path getPath() {
- throw new UnsupportedOperationException(origin.toString());
+ throw new UnsupportedOperationException("getPath() from " +
origin.toString());
}
/**
diff --git
a/src/main/java/org/apache/commons/io/build/AbstractStreamBuilder.java
b/src/main/java/org/apache/commons/io/build/AbstractStreamBuilder.java
index e938b7eb..3c34689f 100644
--- a/src/main/java/org/apache/commons/io/build/AbstractStreamBuilder.java
+++ b/src/main/java/org/apache/commons/io/build/AbstractStreamBuilder.java
@@ -17,10 +17,16 @@
package org.apache.commons.io.build;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Writer;
import java.nio.charset.Charset;
+import java.nio.file.OpenOption;
import org.apache.commons.io.Charsets;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.file.PathUtils;
/**
* Abstracts building a typed instance of {@code T}.
@@ -31,6 +37,8 @@ import org.apache.commons.io.IOUtils;
*/
public abstract class AbstractStreamBuilder<T, B extends
AbstractStreamBuilder<T, B>> extends AbstractOriginSupplier<T, B> {
+ private static final OpenOption[] DEFAULT_OPEN_OPTIONS =
PathUtils.EMPTY_OPEN_OPTION_ARRAY;
+
/**
* The buffer size, defaults to {@link IOUtils#DEFAULT_BUFFER_SIZE}
({@value IOUtils#DEFAULT_BUFFER_SIZE}).
*/
@@ -51,6 +59,8 @@ public abstract class AbstractStreamBuilder<T, B extends
AbstractStreamBuilder<T
*/
private Charset charsetDefault = Charset.defaultCharset();
+ private OpenOption[] openOptions = DEFAULT_OPEN_OPTIONS;
+
/**
* Gets the buffer size, defaults to {@link IOUtils#DEFAULT_BUFFER_SIZE}
({@value IOUtils#DEFAULT_BUFFER_SIZE}).
*
@@ -87,6 +97,49 @@ public abstract class AbstractStreamBuilder<T, B extends
AbstractStreamBuilder<T
return charsetDefault;
}
+ /**
+ * Gets an input stream from the origin with open options.
+ *
+ * @return An input stream
+ * @throws IOException if an I/O error occurs.
+ * @throws UnsupportedOperationException if the origin cannot be converted
to an InputStream.
+ * @see AbstractOrigin#getInputStream(OpenOption...)
+ * @since 2.13.0
+ */
+ protected InputStream getInputStream() throws IOException {
+ return getOrigin().getInputStream(getOpenOptions());
+ }
+
+ protected OpenOption[] getOpenOptions() {
+ return openOptions;
+ }
+
+ /**
+ * Gets an output stream from the origin with open options.
+ *
+ * @return An input stream
+ * @throws IOException if an I/O error occurs.
+ * @throws UnsupportedOperationException if the origin cannot be converted
to an OututStream.
+ * @see AbstractOrigin#getOutputStream(OpenOption...)
+ * @since 2.13.0
+ */
+ protected OutputStream getOutputStream() throws IOException {
+ return getOrigin().getOutputStream(getOpenOptions());
+ }
+
+ /**
+ * Gets an writer from the origin with open options.
+ *
+ * @return An writer.
+ * @throws IOException if an I/O error occurs.
+ * @throws UnsupportedOperationException if the origin cannot be converted
to a Writer.
+ * @see AbstractOrigin#getOutputStream(OpenOption...)
+ * @since 2.13.0
+ */
+ protected Writer getWriter() throws IOException {
+ return getOrigin().getWriter(getCharset(), getOpenOptions());
+ }
+
/**
* Sets the buffer size.
* <p>
@@ -169,4 +222,25 @@ public abstract class AbstractStreamBuilder<T, B extends
AbstractStreamBuilder<T
this.charsetDefault = defaultCharset;
return asThis();
}
+
+ /**
+ * Sets the OpenOption[].
+ * <p>
+ * Normally used with InputStream, OutputStream, and Writer.
+ * </p>
+ * <p>
+ * Subclasses may ignore this setting.
+ * </p>
+ *
+ * @param openOptions the OpenOption[] name, null resets to the default.
+ * @return this.
+ * @since 2.13.0
+ * @see #setInputStream(InputStream)
+ * @see #setOutputStream(OutputStream)
+ * @see #setWriter(Writer)
+ */
+ public B setOpenOptions(final OpenOption... openOptions) {
+ this.openOptions = openOptions != null ? openOptions :
DEFAULT_OPEN_OPTIONS;
+ return asThis();
+ }
}
diff --git a/src/main/java/org/apache/commons/io/input/BOMInputStream.java
b/src/main/java/org/apache/commons/io/input/BOMInputStream.java
index d6dedd62..abc528ee 100644
--- a/src/main/java/org/apache/commons/io/input/BOMInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/BOMInputStream.java
@@ -20,7 +20,6 @@ import static org.apache.commons.io.IOUtils.EOF;
import java.io.IOException;
import java.io.InputStream;
-import java.nio.file.OpenOption;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
@@ -28,7 +27,6 @@ import java.util.Objects;
import org.apache.commons.io.ByteOrderMark;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
/**
@@ -136,7 +134,7 @@ public class BOMInputStream extends ProxyInputStream {
/**
* Constructs a new instance.
* <p>
- * This builder use the aspects InputStream, include, and
ByteOrderMark[].
+ * This builder use the aspects InputStream, OpenOption[], include,
and ByteOrderMark[].
* </p>
* <p>
* You must provide an origin that can be converted to an InputStream
by this builder, otherwise, this call will throw an
@@ -145,12 +143,12 @@ public class BOMInputStream extends ProxyInputStream {
*
* @return a new instance.
* @throws UnsupportedOperationException if the origin cannot provide
an InputStream.
- * @see AbstractOrigin#getInputStream(OpenOption...)
+ * @see #getInputStream()
*/
@SuppressWarnings("resource")
@Override
public BOMInputStream get() throws IOException {
- return new BOMInputStream(getOrigin().getInputStream(), include,
byteOrderMarks);
+ return new BOMInputStream(getInputStream(), include,
byteOrderMarks);
}
/**
diff --git
a/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
b/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
index 581da635..0ee92f7c 100644
---
a/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
+++
b/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
@@ -18,12 +18,10 @@ package org.apache.commons.io.input;
import java.io.IOException;
import java.io.InputStream;
-import java.nio.file.OpenOption;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
/**
@@ -75,7 +73,7 @@ public class MessageDigestCalculatingInputStream extends
ObservableInputStream {
/**
* Constructs a new instance.
* <p>
- * This builder use the aspects InputStream and MessageDigest.
+ * This builder use the aspects InputStream, OpenOption[], and
MessageDigest.
* </p>
* <p>
* You must provide an origin that can be converted to an InputStream
by this builder, otherwise, this call will throw an
@@ -84,12 +82,12 @@ public class MessageDigestCalculatingInputStream extends
ObservableInputStream {
*
* @return a new instance.
* @throws UnsupportedOperationException if the origin cannot provide
an InputStream.
- * @see AbstractOrigin#getInputStream(OpenOption...)
+ * @see #getInputStream()
*/
@SuppressWarnings("resource")
@Override
public MessageDigestCalculatingInputStream get() throws IOException {
- return new
MessageDigestCalculatingInputStream(getOrigin().getInputStream(),
messageDigest);
+ return new MessageDigestCalculatingInputStream(getInputStream(),
messageDigest);
}
/**
diff --git
a/src/main/java/org/apache/commons/io/input/ReadAheadInputStream.java
b/src/main/java/org/apache/commons/io/input/ReadAheadInputStream.java
index bad740c3..d4790ba4 100644
--- a/src/main/java/org/apache/commons/io/input/ReadAheadInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/ReadAheadInputStream.java
@@ -22,7 +22,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.nio.ByteBuffer;
-import java.nio.file.OpenOption;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -31,7 +30,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
/**
@@ -71,7 +69,7 @@ public class ReadAheadInputStream extends FilterInputStream {
/**
* Constructs a new instance.
* <p>
- * This builder use the aspects InputStream, buffer size,
ExecutorService.
+ * This builder use the aspects InputStream, OpenOption[], buffer
size, ExecutorService.
* </p>
* <p>
* You must provide an origin that can be converted to an InputStream
by this builder, otherwise, this call will throw an
@@ -80,12 +78,12 @@ public class ReadAheadInputStream extends FilterInputStream
{
*
* @return a new instance.
* @throws UnsupportedOperationException if the origin cannot provide
an InputStream.
- * @see AbstractOrigin#getInputStream(OpenOption...)
+ * @see #getInputStream()
*/
@SuppressWarnings("resource")
@Override
public ReadAheadInputStream get() throws IOException {
- return new ReadAheadInputStream(getOrigin().getInputStream(),
getBufferSize(), executorService != null ? executorService :
newExecutorService(),
+ return new ReadAheadInputStream(getInputStream(), getBufferSize(),
executorService != null ? executorService : newExecutorService(),
executorService == null);
}
diff --git
a/src/main/java/org/apache/commons/io/input/UncheckedFilterInputStream.java
b/src/main/java/org/apache/commons/io/input/UncheckedFilterInputStream.java
index 05414782..58609c10 100644
--- a/src/main/java/org/apache/commons/io/input/UncheckedFilterInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/UncheckedFilterInputStream.java
@@ -22,9 +22,7 @@ import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
-import java.nio.file.OpenOption;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
import org.apache.commons.io.function.Uncheck;
@@ -65,7 +63,7 @@ public final class UncheckedFilterInputStream extends
FilterInputStream {
/**
* Constructs a new instance.
* <p>
- * This builder use the aspect InputStream.
+ * This builder use the aspect InputStream and OpenOption[].
* </p>
* <p>
* You must provide an origin that can be converted to an InputStream
by this builder, otherwise, this call will throw an
@@ -74,12 +72,12 @@ public final class UncheckedFilterInputStream extends
FilterInputStream {
*
* @return a new instance.
* @throws UnsupportedOperationException if the origin cannot provide
an InputStream.
- * @see AbstractOrigin#getInputStream(OpenOption...)
+ * @see #getInputStream()
*/
@Override
public UncheckedFilterInputStream get() {
// This an unchecked class, so this method is as well.
- return Uncheck.get(() -> new
UncheckedFilterInputStream(getOrigin().getInputStream()));
+ return Uncheck.get(() -> new
UncheckedFilterInputStream(getInputStream()));
}
}
diff --git
a/src/main/java/org/apache/commons/io/input/UnsynchronizedBufferedInputStream.java
b/src/main/java/org/apache/commons/io/input/UnsynchronizedBufferedInputStream.java
index 1034609c..ffd456df 100644
---
a/src/main/java/org/apache/commons/io/input/UnsynchronizedBufferedInputStream.java
+++
b/src/main/java/org/apache/commons/io/input/UnsynchronizedBufferedInputStream.java
@@ -20,10 +20,8 @@ package org.apache.commons.io.input;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.nio.file.OpenOption;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
/**
@@ -82,7 +80,7 @@ public final class UnsynchronizedBufferedInputStream extends
UnsynchronizedFilte
/**
* Constructs a new instance.
* <p>
- * This builder use the aspects InputStream and buffer size.
+ * This builder use the aspects InputStream, OpenOption[] and buffer
size.
* </p>
* <p>
* You must provide an origin that can be converted to an InputStream
by this builder, otherwise, this call will throw an
@@ -91,12 +89,12 @@ public final class UnsynchronizedBufferedInputStream
extends UnsynchronizedFilte
*
* @return a new instance.
* @throws UnsupportedOperationException if the origin cannot provide
an InputStream.
- * @see AbstractOrigin#getInputStream(OpenOption...)
+ * @see #getInputStream()
*/
@SuppressWarnings("resource") // Caller closes.
@Override
public UnsynchronizedBufferedInputStream get() throws IOException {
- return new
UnsynchronizedBufferedInputStream(getOrigin().getInputStream(),
getBufferSize());
+ return new UnsynchronizedBufferedInputStream(getInputStream(),
getBufferSize());
}
}
diff --git
a/src/main/java/org/apache/commons/io/input/UnsynchronizedFilterInputStream.java
b/src/main/java/org/apache/commons/io/input/UnsynchronizedFilterInputStream.java
index 698f42d8..0465cd6b 100644
---
a/src/main/java/org/apache/commons/io/input/UnsynchronizedFilterInputStream.java
+++
b/src/main/java/org/apache/commons/io/input/UnsynchronizedFilterInputStream.java
@@ -20,9 +20,7 @@ package org.apache.commons.io.input;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.nio.file.OpenOption;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
/**
@@ -69,7 +67,7 @@ public class UnsynchronizedFilterInputStream extends
InputStream {
/**
* Constructs a new instance.
* <p>
- * This builder use the aspect InputStream.
+ * This builder use the aspect InputStream and OpenOption[].
* </p>
* <p>
* You must provide an origin that can be converted to an InputStream
by this builder, otherwise, this call will throw an
@@ -78,12 +76,12 @@ public class UnsynchronizedFilterInputStream extends
InputStream {
*
* @return a new instance.
* @throws UnsupportedOperationException if the origin cannot provide
an InputStream.
- * @see AbstractOrigin#getInputStream(OpenOption...)
+ * @see #getInputStream()
*/
@SuppressWarnings("resource") // Caller closes.
@Override
public UnsynchronizedFilterInputStream get() throws IOException {
- return new
UnsynchronizedFilterInputStream(getOrigin().getInputStream());
+ return new UnsynchronizedFilterInputStream(getInputStream());
}
}
diff --git a/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
b/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
index 251375d9..2e2f0f42 100644
--- a/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
+++ b/src/main/java/org/apache/commons/io/input/XmlStreamReader.java
@@ -30,7 +30,6 @@ import java.net.URLConnection;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
-import java.nio.file.OpenOption;
import java.nio.file.Path;
import java.text.MessageFormat;
import java.util.Locale;
@@ -41,7 +40,6 @@ import java.util.regex.Pattern;
import org.apache.commons.io.ByteOrderMark;
import org.apache.commons.io.Charsets;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
import org.apache.commons.io.function.IOConsumer;
import org.apache.commons.io.output.XmlStreamWriter;
@@ -123,7 +121,7 @@ public class XmlStreamReader extends Reader {
/**
* Constructs a new instance.
* <p>
- * This builder use the aspect InputStream, httpContentType, lenient,
and defaultEncoding.
+ * This builder use the aspect InputStream, OpenOption[],
httpContentType, lenient, and defaultEncoding.
* </p>
* <p>
* You must provide an origin that can be converted to an InputStream
by this builder, otherwise, this call will throw an
@@ -134,7 +132,7 @@ public class XmlStreamReader extends Reader {
* @throws UnsupportedOperationException if the origin cannot provide
an InputStream.
* @throws IOException thrown if there is a problem
reading the stream.
* @throws XmlStreamReaderException thrown if the charset
encoding could not be determined according to the specification.
- * @see AbstractOrigin#getInputStream(OpenOption...)
+ * @see #getInputStream()
*/
@SuppressWarnings("resource")
@Override
@@ -142,8 +140,8 @@ public class XmlStreamReader extends Reader {
final String defaultEncoding = nullCharset ? null :
getCharset().name();
// @formatter:off
return httpContentType == null
- ? new XmlStreamReader(getOrigin().getInputStream(),
lenient, defaultEncoding)
- : new XmlStreamReader(getOrigin().getInputStream(),
httpContentType, lenient, defaultEncoding);
+ ? new XmlStreamReader(getInputStream(), lenient,
defaultEncoding)
+ : new XmlStreamReader(getInputStream(), httpContentType,
lenient, defaultEncoding);
// @formatter:on
}
diff --git
a/src/main/java/org/apache/commons/io/output/UncheckedFilterOutputStream.java
b/src/main/java/org/apache/commons/io/output/UncheckedFilterOutputStream.java
index 3a0978ca..c1e9b7ae 100644
---
a/src/main/java/org/apache/commons/io/output/UncheckedFilterOutputStream.java
+++
b/src/main/java/org/apache/commons/io/output/UncheckedFilterOutputStream.java
@@ -21,9 +21,7 @@ import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UncheckedIOException;
-import java.nio.file.OpenOption;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
import org.apache.commons.io.function.Uncheck;
@@ -64,7 +62,7 @@ public final class UncheckedFilterOutputStream extends
FilterOutputStream {
/**
* Constructs a new instance.
* <p>
- * This builder use the aspect OutputStream.
+ * This builder use the aspect OutputStream and OpenOption[].
* </p>
* <p>
* You must provide an origin that can be converted to an OutputStream
by this builder, otherwise, this call will throw an
@@ -73,12 +71,12 @@ public final class UncheckedFilterOutputStream extends
FilterOutputStream {
*
* @return a new instance.
* @throws UnsupportedOperationException if the origin cannot provide
an OutputStream.
- * @see AbstractOrigin#getOutputStream(OpenOption...)
+ * @see #getOutputStream()
*/
@SuppressWarnings("resource")
@Override
public UncheckedFilterOutputStream get() throws IOException {
- return new
UncheckedFilterOutputStream(getOrigin().getOutputStream());
+ return new UncheckedFilterOutputStream(getOutputStream());
}
}
diff --git
a/src/main/java/org/apache/commons/io/output/UncheckedFilterWriter.java
b/src/main/java/org/apache/commons/io/output/UncheckedFilterWriter.java
index 45c7f83a..14a98226 100644
--- a/src/main/java/org/apache/commons/io/output/UncheckedFilterWriter.java
+++ b/src/main/java/org/apache/commons/io/output/UncheckedFilterWriter.java
@@ -21,10 +21,7 @@ import java.io.FilterWriter;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.io.Writer;
-import java.nio.charset.Charset;
-import java.nio.file.OpenOption;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
import org.apache.commons.io.function.Uncheck;
@@ -65,7 +62,7 @@ public final class UncheckedFilterWriter extends FilterWriter
{
/**
* Constructs a new instance.
* <p>
- * This builder use the aspects Writer and Charset.
+ * This builder use the aspects Writer, OpenOption[], and Charset.
* </p>
* <p>
* You must provide an origin that can be converted to a Writer by
this builder, otherwise, this call will throw an
@@ -74,12 +71,12 @@ public final class UncheckedFilterWriter extends
FilterWriter {
*
* @return a new instance.
* @throws UnsupportedOperationException if the origin cannot provide
a Writer.
- * @see AbstractOrigin#getWriter(Charset, OpenOption...)
+ * @see #getWriter()
*/
@SuppressWarnings("resource")
@Override
public UncheckedFilterWriter get() throws IOException {
- return new
UncheckedFilterWriter(getOrigin().getWriter(getCharset()));
+ return new UncheckedFilterWriter(getWriter());
}
}
diff --git a/src/main/java/org/apache/commons/io/output/WriterOutputStream.java
b/src/main/java/org/apache/commons/io/output/WriterOutputStream.java
index c1456785..8e67fc96 100644
--- a/src/main/java/org/apache/commons/io/output/WriterOutputStream.java
+++ b/src/main/java/org/apache/commons/io/output/WriterOutputStream.java
@@ -26,11 +26,9 @@ import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
-import java.nio.file.OpenOption;
import org.apache.commons.io.Charsets;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
import org.apache.commons.io.charset.CharsetDecoders;
@@ -108,7 +106,7 @@ public class WriterOutputStream extends OutputStream {
/**
* Constructs a new instance.
* <p>
- * This builder use the aspect Writer, Charset, CharsetDecoder, buffer
size and writeImmediately.
+ * This builder use the aspect Writer, OpenOption[], Charset,
CharsetDecoder, buffer size and writeImmediately.
* </p>
* <p>
* You must provide an origin that can be converted to a Writer by
this builder, otherwise, this call will throw an
@@ -117,12 +115,12 @@ public class WriterOutputStream extends OutputStream {
*
* @return a new instance.
* @throws UnsupportedOperationException if the origin cannot provide
a Writer.
- * @see AbstractOrigin#getWriter(Charset, OpenOption...)
+ * @see #getWriter()
*/
@SuppressWarnings("resource")
@Override
public WriterOutputStream get() throws IOException {
- return new WriterOutputStream(getOrigin().getWriter(getCharset()),
charsetDecoder, getBufferSize(), writeImmediately);
+ return new WriterOutputStream(getWriter(), charsetDecoder,
getBufferSize(), writeImmediately);
}
@Override
diff --git a/src/main/java/org/apache/commons/io/output/XmlStreamWriter.java
b/src/main/java/org/apache/commons/io/output/XmlStreamWriter.java
index 462c6028..53509447 100644
--- a/src/main/java/org/apache/commons/io/output/XmlStreamWriter.java
+++ b/src/main/java/org/apache/commons/io/output/XmlStreamWriter.java
@@ -26,14 +26,12 @@ import java.io.StringWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
-import java.nio.file.OpenOption;
import java.util.Locale;
import java.util.Objects;
import java.util.regex.Matcher;
import org.apache.commons.io.Charsets;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.build.AbstractOrigin;
import org.apache.commons.io.build.AbstractStreamBuilder;
import org.apache.commons.io.input.XmlStreamReader;
@@ -72,7 +70,7 @@ public class XmlStreamWriter extends Writer {
/**
* Constructs a new instance.
* <p>
- * This builder use the aspect OutputStream and Charset.
+ * This builder use the aspect OutputStream, OpenOption[], and Charset.
* </p>
* <p>
* You must provide an origin that can be converted to an OutputStream
by this builder, otherwise, this call will throw an
@@ -82,12 +80,12 @@ public class XmlStreamWriter extends Writer {
* @return a new instance.
* @throws UnsupportedOperationException if the origin cannot provide
an OutputStream.
* @throws IOException if an I/O error occurs.
- * @see AbstractOrigin#getInputStream(OpenOption...)
+ * @see #getOutputStream()
*/
@SuppressWarnings("resource")
@Override
public XmlStreamWriter get() throws IOException {
- return new XmlStreamWriter(getOrigin().getOutputStream(),
getCharset());
+ return new XmlStreamWriter(getOutputStream(), getCharset());
}
}
diff --git
a/src/test/java/org/apache/commons/io/input/BufferedFileChannelInputStreamTest.java
b/src/test/java/org/apache/commons/io/input/BufferedFileChannelInputStreamTest.java
index 758d96c3..0a56ae8e 100644
---
a/src/test/java/org/apache/commons/io/input/BufferedFileChannelInputStreamTest.java
+++
b/src/test/java/org/apache/commons/io/input/BufferedFileChannelInputStreamTest.java
@@ -18,6 +18,7 @@ package org.apache.commons.io.input;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.file.StandardOpenOption;
import org.junit.jupiter.api.BeforeEach;
@@ -40,7 +41,8 @@ public class BufferedFileChannelInputStreamTest extends
AbstractInputStreamTest
new BufferedFileChannelInputStream(inputFile, 123), // small,
unaligned buffer size
BufferedFileChannelInputStream.builder().setPath(inputFile).get(),
// default
BufferedFileChannelInputStream.builder().setPath(inputFile).setBufferSize(123).get(),
// small, unaligned buffer size
-
BufferedFileChannelInputStream.builder().setURI(inputFile.toUri()).setBufferSize(1024).get()
// URI and buffer size
+
BufferedFileChannelInputStream.builder().setURI(inputFile.toUri()).setBufferSize(1024).get(),
// URI and buffer size
+
BufferedFileChannelInputStream.builder().setPath(inputFile).setOpenOptions(StandardOpenOption.READ).get(),
// open options
};
//@formatter:on
}
diff --git
a/src/test/java/org/apache/commons/io/input/RandomAccessFileInputStreamTest.java
b/src/test/java/org/apache/commons/io/input/RandomAccessFileInputStreamTest.java
index 51ab0409..80137c9d 100644
---
a/src/test/java/org/apache/commons/io/input/RandomAccessFileInputStreamTest.java
+++
b/src/test/java/org/apache/commons/io/input/RandomAccessFileInputStreamTest.java
@@ -29,18 +29,21 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
import org.apache.commons.io.RandomAccessFileMode;
import org.junit.jupiter.api.Test;
public class RandomAccessFileInputStreamTest {
- private static final String DATA_FILE =
"src/test/resources/org/apache/commons/io/test-file-iso8859-1.bin";
+ private static final String DATA_FILE_NAME =
"src/test/resources/org/apache/commons/io/test-file-iso8859-1.bin";
+ private static final Path DATA_PATH = Paths.get(DATA_FILE_NAME);
private static final int DATA_FILE_LEN = 1430;
private RandomAccessFile createRandomAccessFile() throws
FileNotFoundException {
- return RandomAccessFileMode.READ_ONLY.create(DATA_FILE);
+ return RandomAccessFileMode.READ_ONLY.create(DATA_FILE_NAME);
}
@Test
@@ -63,7 +66,7 @@ public class RandomAccessFileInputStreamTest {
@Test
public void testBuilderFile() throws IOException {
try (RandomAccessFile file = createRandomAccessFile()) {
- try (RandomAccessFileInputStream inputStream =
RandomAccessFileInputStream.builder().setFile(new File(DATA_FILE)).get()) {
+ try (RandomAccessFileInputStream inputStream =
RandomAccessFileInputStream.builder().setFile(new File(DATA_FILE_NAME)).get()) {
assertFalse(inputStream.isCloseOnClose());
assertNotEquals(-1, inputStream.getRandomAccessFile().read());
}
@@ -75,7 +78,20 @@ public class RandomAccessFileInputStreamTest {
@Test
public void testBuilderPath() throws IOException {
try (RandomAccessFile file = createRandomAccessFile()) {
- try (RandomAccessFileInputStream inputStream =
RandomAccessFileInputStream.builder().setPath(Paths.get(DATA_FILE)).get()) {
+ try (RandomAccessFileInputStream inputStream =
RandomAccessFileInputStream.builder().setPath(DATA_PATH).get()) {
+ assertFalse(inputStream.isCloseOnClose());
+ assertNotEquals(-1, inputStream.getRandomAccessFile().read());
+ }
+ file.read();
+ }
+ }
+
+ @SuppressWarnings("resource") // instance variable access
+ @Test
+ public void testBuilderPathOpenOptions() throws IOException {
+ try (RandomAccessFile file = createRandomAccessFile()) {
+ try (RandomAccessFileInputStream inputStream =
RandomAccessFileInputStream.builder().setPath(DATA_PATH).setOpenOptions(StandardOpenOption.READ)
+ .get()) {
assertFalse(inputStream.isCloseOnClose());
assertNotEquals(-1, inputStream.getRandomAccessFile().read());
}
diff --git
a/src/test/java/org/apache/commons/io/input/ReadAheadInputStreamTest.java
b/src/test/java/org/apache/commons/io/input/ReadAheadInputStreamTest.java
index 125a8681..959932cb 100644
--- a/src/test/java/org/apache/commons/io/input/ReadAheadInputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/input/ReadAheadInputStreamTest.java
@@ -18,6 +18,7 @@ package org.apache.commons.io.input;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.file.StandardOpenOption;
import org.junit.jupiter.api.BeforeEach;
@@ -54,6 +55,7 @@ public class ReadAheadInputStreamTest extends
AbstractInputStreamTest {
// Tests unaligned buffers, wrapped bigger than outer.
ReadAheadInputStream.builder().setInputStream(new
BufferedFileChannelInputStream(inputFile, 321)).setBufferSize(123).get(),
// Tests unaligned buffers, wrapped smaller than outer.
- ReadAheadInputStream.builder().setInputStream(new
BufferedFileChannelInputStream(inputFile, 123)).setBufferSize(321).get() };
+ ReadAheadInputStream.builder().setInputStream(new
BufferedFileChannelInputStream(inputFile, 123)).setBufferSize(321).get(),
+
ReadAheadInputStream.builder().setPath(inputFile).setOpenOptions(StandardOpenOption.READ).get()
};
}
}
diff --git a/src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java
b/src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java
index 8af91b01..e57da885 100644
--- a/src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java
+++ b/src/test/java/org/apache/commons/io/input/XmlStreamReaderTest.java
@@ -34,6 +34,7 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
@@ -204,6 +205,16 @@ public class XmlStreamReaderTest {
}
}
+ @Test
+ protected void testConstructorFileInputOpenOptions() throws IOException {
+ try (XmlStreamReader reader = new XmlStreamReader(new
File("pom.xml"))) {
+ // do nothing
+ }
+ try (XmlStreamReader reader =
XmlStreamReader.builder().setFile("pom.xml").setOpenOptions(StandardOpenOption.READ).get())
{
+ // do nothing
+ }
+ }
+
@Test
protected void testConstructorFileInputNull() {
assertThrows(NullPointerException.class, () -> new
XmlStreamReader((File) null));
diff --git
a/src/test/java/org/apache/commons/io/output/WriterOutputStreamTest.java
b/src/test/java/org/apache/commons/io/output/WriterOutputStreamTest.java
index 8125fed4..10aad5f0 100644
--- a/src/test/java/org/apache/commons/io/output/WriterOutputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/output/WriterOutputStreamTest.java
@@ -24,6 +24,7 @@ import java.io.StringWriter;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.StandardCharsets;
+import java.nio.file.StandardOpenOption;
import java.util.Random;
import org.apache.commons.io.Charsets;
@@ -219,6 +220,7 @@ public class WriterOutputStreamTest {
.setCharset("us-ascii")
.setBufferSize(1024)
.setWriteImmediately(true)
+ .setOpenOptions(StandardOpenOption.CREATE,
StandardOpenOption.READ, StandardOpenOption.WRITE)
.get()) {
// @formatter:on
out.write("abc".getBytes(StandardCharsets.US_ASCII));