You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2021/07/25 18:42:33 UTC
[commons-io] 01/04: [IO-744] FileWriterWithEncoding for an existing
file no longer truncates the file. #251.
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
commit 89675b658065bb3460993e6995a3d1b88f08f545
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun Jul 25 14:36:11 2021 -0400
[IO-744] FileWriterWithEncoding for an existing file no longer truncates
the file. #251.
This commit is a much simpler fix than PR 251. The test from the PR is
the same, just reformatted.
---
src/changes/changes.xml | 3 +
.../commons/io/output/FileWriterWithEncoding.java | 2 +-
.../io/output/FileWriterWithEncodingTest.java | 66 +++++++++++++---------
3 files changed, 42 insertions(+), 29 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 9066d5c..fdb38d4 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -50,6 +50,9 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="ggregory" type="fix" due-to="Gary Gregory">
Fix Javadoc links to the JRE Javadoc 8.
</action>
+ <action issue="IO-744" dev="ggregory" type="fix" due-to="RBRi, Gary Gregory">
+ FileWriterWithEncoding for an existing file no longer truncates the file. #251.
+ </action>
<!-- ADD -->
<action dev="ggregory" type="add" due-to="Gary Gregory">
Add BrokenReader.INSTANCE.
diff --git a/src/main/java/org/apache/commons/io/output/FileWriterWithEncoding.java b/src/main/java/org/apache/commons/io/output/FileWriterWithEncoding.java
index ce8c207..d3b9d3b 100644
--- a/src/main/java/org/apache/commons/io/output/FileWriterWithEncoding.java
+++ b/src/main/java/org/apache/commons/io/output/FileWriterWithEncoding.java
@@ -227,7 +227,7 @@ public class FileWriterWithEncoding extends Writer {
OutputStream stream = null;
final boolean fileExistedAlready = file.exists();
try {
- stream = Files.newOutputStream(file.toPath(), append ? StandardOpenOption.APPEND : StandardOpenOption.CREATE);
+ stream = Files.newOutputStream(file.toPath(), append ? StandardOpenOption.APPEND : StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
if (encoding instanceof Charset) {
return new OutputStreamWriter(stream, (Charset)encoding);
}
diff --git a/src/test/java/org/apache/commons/io/output/FileWriterWithEncodingTest.java b/src/test/java/org/apache/commons/io/output/FileWriterWithEncodingTest.java
index 3cb227b..60df3ba 100644
--- a/src/test/java/org/apache/commons/io/output/FileWriterWithEncodingTest.java
+++ b/src/test/java/org/apache/commons/io/output/FileWriterWithEncodingTest.java
@@ -18,6 +18,7 @@ package org.apache.commons.io.output;
import static org.apache.commons.io.test.TestUtils.checkFile;
import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@@ -99,10 +100,8 @@ public class FileWriterWithEncodingTest {
}
private void successfulRun(final FileWriterWithEncoding fw21) throws Exception {
- try (
- FileWriter fw1 = new FileWriter(file1); // default encoding
- FileWriterWithEncoding fw2 = fw21
- ){
+ try (FileWriter fw1 = new FileWriter(file1); // default encoding
+ FileWriterWithEncoding fw2 = fw21) {
writeTestPayload(fw1, fw2);
checkFile(file1, file2);
}
@@ -113,10 +112,8 @@ public class FileWriterWithEncodingTest {
@Test
public void testDifferentEncoding() throws Exception {
if (Charset.isSupported("UTF-16BE")) {
- try (
- FileWriter fw1 = new FileWriter(file1); // default encoding
- FileWriterWithEncoding fw2 = new FileWriterWithEncoding(file2, defaultEncoding)
- ){
+ try (FileWriter fw1 = new FileWriter(file1); // default encoding
+ FileWriterWithEncoding fw2 = new FileWriterWithEncoding(file2, defaultEncoding)) {
writeTestPayload(fw1, fw2);
try {
checkFile(file1, file2);
@@ -130,10 +127,8 @@ public class FileWriterWithEncodingTest {
assertTrue(file2.exists());
}
if (Charset.isSupported("UTF-16LE")) {
- try (
- FileWriter fw1 = new FileWriter(file1); // default encoding
- FileWriterWithEncoding fw2 = new FileWriterWithEncoding(file2, defaultEncoding)
- ){
+ try (FileWriter fw1 = new FileWriter(file1); // default encoding
+ FileWriterWithEncoding fw2 = new FileWriterWithEncoding(file2, defaultEncoding)) {
writeTestPayload(fw1, fw2);
try {
checkFile(file1, file2);
@@ -170,40 +165,40 @@ public class FileWriterWithEncodingTest {
@Test
public void constructor_File_encoding_badEncoding() {
assertThrows(IOException.class, () -> {
- try (
- Writer writer = new FileWriterWithEncoding(file1, "BAD-ENCODE")
- ){ }
- });
+ try (Writer writer = new FileWriterWithEncoding(file1, "BAD-ENCODE")) {
+ // empty
+ }
+ });
assertFalse(file1.exists());
}
@Test
public void constructor_File_directory() {
assertThrows(IOException.class, () -> {
- try (
- Writer writer = new FileWriterWithEncoding(temporaryFolder, defaultEncoding)
- ){ }
- });
+ try (Writer writer = new FileWriterWithEncoding(temporaryFolder, defaultEncoding)) {
+ // empty
+ }
+ });
assertFalse(file1.exists());
}
@Test
public void constructor_File_nullFile() {
assertThrows(NullPointerException.class, () -> {
- try (
- Writer writer = new FileWriterWithEncoding((File) null, defaultEncoding)
- ){ }
- });
+ try (Writer writer = new FileWriterWithEncoding((File) null, defaultEncoding)) {
+ // empty
+ }
+ });
assertFalse(file1.exists());
}
@Test
public void constructor_fileName_nullFile() {
assertThrows(NullPointerException.class, () -> {
- try (
- Writer writer = new FileWriterWithEncoding((String) null, defaultEncoding)
- ){ }
- });
+ try (Writer writer = new FileWriterWithEncoding((String) null, defaultEncoding)) {
+ // empty
+ }
+ });
assertFalse(file1.exists());
}
@@ -213,7 +208,22 @@ public class FileWriterWithEncodingTest {
successfulRun(new FileWriterWithEncoding(file2, (Charset) null));
fail();
} catch (final NullPointerException ignore) {
+ // empty
+ }
+ }
+ @Test
+ public void constructor_File_existingFile_withContent() throws Exception {
+ try (FileWriter fw1 = new FileWriter(file1);) {
+ fw1.write(textContent);
+ fw1.write(65);
}
+ assertEquals(1025, file1.length());
+
+ try (FileWriterWithEncoding fw1 = new FileWriterWithEncoding(file1, defaultEncoding)) {
+ fw1.write("ABcd");
+ }
+
+ assertEquals(4, file1.length());
}
}