1. Introduction
In this quick tutorial, we’ll see how we use Java to append data to the content of a file – in a few simple ways.
Let’s start with how we can do this using core Java’s FileWriter.
2. Using FileWriter
Here’s a simple test – reading an existing file, appending some text, and then making sure that got appended correctly:
@Test public void whenAppendToFileUsingFileWriter_thenCorrect() throws IOException { FileWriter fw = new FileWriter(fileName, true); BufferedWriter bw = new BufferedWriter(fw); bw.write("Spain"); bw.newLine(); bw.close(); assertThat(getStringFromInputStream( new FileInputStream(fileName))) .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); }
Note that FileWriter’s constructor accepts a boolean marking if we want to append data to an existing file.
If we set it to false, then the existing content will be replaced.
3. Using FileOutputStream
Next – let’s see how we can do the same operation – using FileOutputStream:
@Test public void whenAppendToFileUsingFileOutputStream_thenCorrect() throws Exception { FileOutputStream fos = new FileOutputStream(fileName, true); fos.write("Spain\r\n".getBytes()); fos.close(); assertThat(StreamUtils.getStringFromInputStream( new FileInputStream(fileName))) .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); }
Similarly, the FileOutputStream constructor accepts a boolean that should be set to true to mark that we want to append data to an existing file.
4. Using java.nio.file
Next – we can also append content to files using functionality in java.nio.file – which was introduced in JDK 7:
@Test public void whenAppendToFileUsingFiles_thenCorrect() throws IOException { String contentToAppend = "Spain\r\n"; Files.write( Paths.get(fileName), contentToAppend.getBytes(), StandardOpenOption.APPEND); assertThat(StreamUtils.getStringFromInputStream( new FileInputStream(fileName))) .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); }
5. Using Guava
To start using Guava, we need to add its dependency to our pom.xml:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>23.0</version> </dependency>
Now, let’s see how we can start using Guava to append content to an existing file:
@Test public void whenAppendToFileUsingFileWriter_thenCorrect() throws IOException { File file = new File(fileName); CharSink chs = Files.asCharSink( file, Charsets.UTF_8, FileWriteMode.APPEND); chs.write("Spain\r\n"); assertThat(StreamUtils.getStringFromInputStream( new FileInputStream(fileName))) .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); }
6. Using Apache Commons IO FileUtils
Finally – let’s see how we can append content to an existing file using Apache Commons IO FileUtils.
First, let’s add the Apache Commons IO dependency to our pom.xml:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
Now, let’s see a quick example that demonstrates appending content to an existing file using FileUtils:
@Test public void whenAppendToFileUsingFiles_thenCorrect() throws IOException { File file = new File(fileName); FileUtils.writeStringToFile( file, "Spain\r\n", StandardCharsets.UTF_8, true); assertThat(StreamUtils.getStringFromInputStream( new FileInputStream(fileName))) .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n"); }
7. Conclusion
In this article, we’ve seen how we can append content in multiple ways.
The full implementation of this tutorial can be found over on GitHub.