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 010299c Add PathUtils.writeString(Path, CharSequence, Charset,
OpenOption...).
010299c is described below
commit 010299c21811b11a41c8d5bd73023f75eb29058e
Author: Gary Gregory <[email protected]>
AuthorDate: Sun Sep 26 14:46:35 2021 -0400
Add PathUtils.writeString(Path, CharSequence, Charset, OpenOption...).
---
src/changes/changes.xml | 3 +++
.../java/org/apache/commons/io/file/PathUtils.java | 24 +++++++++++++++++--
.../org/apache/commons/io/file/PathUtilsTest.java | 10 ++++++++
.../java/org/apache/commons/io/test/TestUtils.java | 27 ++++++++++++++++++++--
4 files changed, 60 insertions(+), 4 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 107874b..971ff45 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -238,6 +238,9 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="ggregory" type="add" due-to="Gary Gregory">
Add and use RandomAccessFileMode.
</action>
+ <action dev="ggregory" type="add" due-to="Gary Gregory">
+ Add PathUtils.writeString(Path, CharSequence, Charset, OpenOption...).
+ </action>
<!-- UPDATE -->
<action dev="ggregory" type="add" due-to="Gary Gregory">
Update FileEntry to use FileTime instead of long for file time stamps.
diff --git a/src/main/java/org/apache/commons/io/file/PathUtils.java
b/src/main/java/org/apache/commons/io/file/PathUtils.java
index f9968c2..06131a2 100644
--- a/src/main/java/org/apache/commons/io/file/PathUtils.java
+++ b/src/main/java/org/apache/commons/io/file/PathUtils.java
@@ -141,9 +141,9 @@ public final class PathUtils {
}
}
- private static final OpenOption[] OPEN_OPTIONS_TRUNCATE = new OpenOption[]
{StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING};
+ private static final OpenOption[] OPEN_OPTIONS_TRUNCATE =
{StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING};
- private static final OpenOption[] OPEN_OPTIONS_APPEND = new OpenOption[]
{StandardOpenOption.CREATE, StandardOpenOption.APPEND};
+ private static final OpenOption[] OPEN_OPTIONS_APPEND =
{StandardOpenOption.CREATE, StandardOpenOption.APPEND};
/**
* Empty {@link CopyOption} array.
@@ -1395,6 +1395,26 @@ public final class PathUtils {
}
/**
+ * Writes the given character sequence to a file at the given path.
+ *
+ * @param path The target file.
+ * @param charSequence The character sequence text.
+ * @param charset The Charset to encode the text.
+ * @param openOptions options How to open the file.
+ * @return The given path.
+ * @throws IOException if an I/O error occurs writing to or creating the
file.
+ * @since 2.12.0
+ */
+ public static Path writeString(final Path path, final CharSequence
charSequence, final Charset charset, final OpenOption... openOptions)
+ throws IOException {
+ // Check the text is not null before opening file.
+ Objects.requireNonNull(path, "path");
+ Objects.requireNonNull(charSequence, "charSequence");
+ Files.write(path,
String.valueOf(charSequence).getBytes(Charsets.toCharset(charset)),
openOptions);
+ return path;
+ }
+
+ /**
* Does allow to instantiate.
*/
private PathUtils() {
diff --git a/src/test/java/org/apache/commons/io/file/PathUtilsTest.java
b/src/test/java/org/apache/commons/io/file/PathUtilsTest.java
index 63f29bd..410f030 100644
--- a/src/test/java/org/apache/commons/io/file/PathUtilsTest.java
+++ b/src/test/java/org/apache/commons/io/file/PathUtilsTest.java
@@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
@@ -37,6 +38,7 @@ import java.util.Iterator;
import java.util.Map;
import org.apache.commons.io.filefilter.NameFileFilter;
+import org.apache.commons.io.test.TestUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Test;
@@ -256,4 +258,12 @@ public class PathUtilsTest extends TestArguments {
return file;
}
+ @Test
+ public void testWriteStringToFile1() throws Exception {
+ final Path file = tempDir.resolve("write.txt");
+ PathUtils.writeString(file, "Hello /u1234", StandardCharsets.UTF_8);
+ final byte[] text = "Hello /u1234".getBytes(StandardCharsets.UTF_8);
+ TestUtils.assertEqualContent(text, file);
+ }
+
}
diff --git a/src/test/java/org/apache/commons/io/test/TestUtils.java
b/src/test/java/org/apache/commons/io/test/TestUtils.java
index fe56b19..fc0c3a9 100644
--- a/src/test/java/org/apache/commons/io/test/TestUtils.java
+++ b/src/test/java/org/apache/commons/io/test/TestUtils.java
@@ -33,6 +33,7 @@ import java.io.Reader;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.time.Duration;
import org.apache.commons.io.FileUtils;
@@ -52,9 +53,20 @@ public abstract class TestUtils {
* @throws IOException If an I/O error occurs while reading the file
contents
*/
public static void assertEqualContent(final byte[] b0, final File file)
throws IOException {
+ assertEqualContent(b0, file.toPath());
+ }
+
+ /**
+ * Assert that the content of a file is equal to that in a byte[].
+ *
+ * @param b0 the expected contents
+ * @param file the file to check
+ * @throws IOException If an I/O error occurs while reading the file
contents
+ */
+ public static void assertEqualContent(final byte[] b0, final Path file)
throws IOException {
int count = 0, numRead = 0;
final byte[] b1 = new byte[b0.length];
- try (InputStream is = Files.newInputStream(file.toPath())) {
+ try (InputStream is = Files.newInputStream(file)) {
while (count < b0.length && numRead >= 0) {
numRead = is.read(b1, count, b0.length);
count += numRead;
@@ -74,9 +86,20 @@ public abstract class TestUtils {
* @throws IOException If an I/O error occurs while reading the file
contents
*/
public static void assertEqualContent(final char[] c0, final File file)
throws IOException {
+ assertEqualContent(c0, file.toPath());
+ }
+
+ /**
+ * Assert that the content of a file is equal to that in a char[].
+ *
+ * @param c0 the expected contents
+ * @param file the file to check
+ * @throws IOException If an I/O error occurs while reading the file
contents
+ */
+ public static void assertEqualContent(final char[] c0, final Path file)
throws IOException {
int count = 0, numRead = 0;
final char[] c1 = new char[c0.length];
- try (Reader ir = Files.newBufferedReader(file.toPath())) {
+ try (Reader ir = Files.newBufferedReader(file)) {
while (count < c0.length && numRead >= 0) {
numRead = ir.read(c1, count, c0.length);
count += numRead;