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 aef2fdfed Add IOUtils.readLines(CharSequence)
aef2fdfed is described below
commit aef2fdfed2f86b8c1359cfd2fe777193a79abaa6
Author: Gary Gregory <[email protected]>
AuthorDate: Fri Oct 18 10:53:27 2024 -0400
Add IOUtils.readLines(CharSequence)
---
src/changes/changes.xml | 1 +
src/main/java/org/apache/commons/io/IOUtils.java | 15 +++++++++++
.../java/org/apache/commons/io/IOUtilsTest.java | 31 +++++++++++++++++++++-
3 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 6784b22c0..b932b2c65 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -59,6 +59,7 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="ggregory" type="add" due-to="Gary
Gregory">Add IORandomAccessFile.</action>
<action dev="ggregory" type="add" due-to="Gary
Gregory">Add RandomAccessFileMode.io(String).</action>
<action dev="ggregory" type="add" due-to="Gary
Gregory">Add FileAlterationObserver.Builder() and deprecate most
constructors.</action>
+ <action dev="ggregory" type="add" due-to="Gary
Gregory">Add IOUtils.readLines(CharSequence).</action>
<!-- UPDATE -->
<action dev="ggregory" type="update" due-to="Gary
Gregory">Bump org.apache.commons:commons-parent from 74 to 77 #670, #676,
#679.</action>
<action dev="ggregory" type="update" due-to="Gary
Gregory">Bump commons.bytebuddy.version from 1.15.1 to 1.15.5 #672, #673, #685,
#686.</action>
diff --git a/src/main/java/org/apache/commons/io/IOUtils.java
b/src/main/java/org/apache/commons/io/IOUtils.java
index c8f3154ea..15c0bdfd6 100644
--- a/src/main/java/org/apache/commons/io/IOUtils.java
+++ b/src/main/java/org/apache/commons/io/IOUtils.java
@@ -64,6 +64,7 @@ import java.util.zip.InflaterInputStream;
import org.apache.commons.io.function.IOConsumer;
import org.apache.commons.io.function.IOSupplier;
import org.apache.commons.io.function.IOTriFunction;
+import org.apache.commons.io.input.CharSequenceReader;
import org.apache.commons.io.input.QueueInputStream;
import org.apache.commons.io.output.AppendableWriter;
import org.apache.commons.io.output.ByteArrayOutputStream;
@@ -2243,6 +2244,20 @@ public class IOUtils {
return toBufferedReader(reader).lines().collect(Collectors.toList());
}
+ /**
+ * Gets the contents of a {@link CharSequence} as a list of Strings, one
entry per line.
+ *
+ * @param csq the {@link CharSequence} to read, not null
+ * @return the list of Strings, never null
+ * @throws UncheckedIOException if an I/O error occurs
+ * @since 2.18.0
+ */
+ public static List<String> readLines(final CharSequence csq) throws
UncheckedIOException {
+ try (CharSequenceReader reader = new CharSequenceReader(csq)) {
+ return readLines(reader);
+ }
+ }
+
/**
* Gets the contents of a resource as a byte array.
* <p>
diff --git a/src/test/java/org/apache/commons/io/IOUtilsTest.java
b/src/test/java/org/apache/commons/io/IOUtilsTest.java
index f83e31809..da57350c1 100644
--- a/src/test/java/org/apache/commons/io/IOUtilsTest.java
+++ b/src/test/java/org/apache/commons/io/IOUtilsTest.java
@@ -1015,6 +1015,36 @@ public class IOUtilsTest {
IOUtils.closeQuietly(reader);
}
+ @Test
+ public void testReadLines_CharSequence() throws IOException {
+ final File file = TestUtils.newFile(temporaryFolder, "lines.txt");
+ CharSequence csq = null;
+ try {
+ final String[] data = {"hello", "/u1234", "", "this is", "some
text"};
+ TestUtils.createLineBasedFile(file, data);
+ csq = new String(Files.readAllBytes(file.toPath()),
StandardCharsets.UTF_8);
+ final List<String> lines = IOUtils.readLines(csq);
+ assertEquals(Arrays.asList(data), lines);
+ } finally {
+ TestUtils.deleteFile(file);
+ }
+ }
+
+ @Test
+ public void testReadLines_CharSequenceAsStringBuilder() throws IOException
{
+ final File file = TestUtils.newFile(temporaryFolder, "lines.txt");
+ StringBuilder csq = null;
+ try {
+ final String[] data = {"hello", "/u1234", "", "this is", "some
text"};
+ TestUtils.createLineBasedFile(file, data);
+ csq = new StringBuilder(new
String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8));
+ final List<String> lines = IOUtils.readLines(csq);
+ assertEquals(Arrays.asList(data), lines);
+ } finally {
+ TestUtils.deleteFile(file);
+ }
+ }
+
@Test
public void testReadLines_InputStream() throws Exception {
final File file = TestUtils.newFile(temporaryFolder, "lines.txt");
@@ -1058,7 +1088,6 @@ public class IOUtilsTest {
try {
final String[] data = {"hello", "/u1234", "", "this is", "some
text"};
TestUtils.createLineBasedFile(file, data);
-
in = new InputStreamReader(Files.newInputStream(file.toPath()));
final List<String> lines = IOUtils.readLines(in);
assertEquals(Arrays.asList(data), lines);