Java – Write a Reader to File

In this quick tutorial, we’re going to write the contents of a Reader to a File using plain Java, then Guava and finally the Apache Commons IO library.

This article is part of the “Java – Back to Basic” series here on VietMX’s Blog.

1. With Java

Let’s start with the simple Java solution:

@Test
public void givenUsingPlainJava_whenWritingReaderContentsToFile_thenCorrect() 
  throws IOException {
    Reader initialReader = new StringReader("Some text");

    int intValueOfChar;
    StringBuilder buffer = new StringBuilder();
    while ((intValueOfChar = initialReader.read()) != -1) {
        buffer.append((char) intValueOfChar);
    }
    initialReader.close();

    File targetFile = new File("src/test/resources/targetFile.txt");
    targetFile.createNewFile();

    Writer targetFileWriter = new FileWriter(targetFile);
    targetFileWriter.write(buffer.toString());
    targetFileWriter.close();
}

First – we’re reading the contents of the Reader into a String; then we’re simply writing the String to File.

2. With Guava

The Guava solution is simpler – we now have the API to deal with writing the reader to file:

@Test
public void givenUsingGuava_whenWritingReaderContentsToFile_thenCorrect() 
  throws IOException {
    Reader initialReader = new StringReader("Some text");

    File targetFile = new File("src/test/resources/targetFile.txt");
    com.google.common.io.Files.touch(targetFile);
    CharSink charSink = com.google.common.io.Files.
      asCharSink(targetFile, Charset.defaultCharset(), FileWriteMode.APPEND);
    charSink.writeFrom(initialReader);

    initialReader.close();
}

3. With Apache Commons IO

And finally, the Commons IO solution – also using higher level APIs to read data from the Reader and write that data to file:

@Test
public void givenUsingCommonsIO_whenWritingReaderContentsToFile_thenCorrect() 
  throws IOException {
    Reader initialReader = new CharSequenceReader("CharSequenceReader extends Reader");

    File targetFile = new File("src/test/resources/targetFile.txt");
    FileUtils.touch(targetFile);
    byte[] buffer = IOUtils.toByteArray(initialReader);
    FileUtils.writeByteArrayToFile(targetFile, buffer);

    initialReader.close();
}

And there we have it – 3 simple solutions for writing the contents of a Reader to File. Make sure to check out the sample over on GitHub.

Related posts:

Java Program to Find a Good Feedback Edge Set in a Graph
Find the Registered Spring Security Filters
Spring Boot - Google OAuth2 Sign-In
Vòng lặp for, while, do-while trong Java
A Guide to Spring Cloud Netflix – Hystrix
How to Break from Java Stream forEach
Apache Commons Collections Bag
JUnit5 Programmatic Extension Registration with @RegisterExtension
Hướng dẫn Java Design Pattern – Chain of Responsibility
Java Program to Implement Efficient O(log n) Fibonacci generator
Java Program to Implement Coppersmith Freivald’s Algorithm
Model, ModelMap, and ModelAndView in Spring MVC
Spring Boot - Flyway Database
Debug a HttpURLConnection problem
Java Program to Implement Treap
Java Program to Check if a Given Binary Tree is an AVL Tree or Not
Java Program to Implement TreeMap API
Command-Line Arguments in Java
Java Program to Generate a Random Subset by Coin Flipping
Getting Started with Stream Processing with Spring Cloud Data Flow
Truyền giá trị và tham chiếu trong java
Biểu thức Lambda trong Java 8 – Lambda Expressions
How to Get All Spring-Managed Beans?
REST Web service: Upload và Download file với Jersey 2.x
Java Program to Use the Bellman-Ford Algorithm to Find the Shortest Path
Spring Security with Maven
Java Program to Perform Inorder Non-Recursive Traversal of a Given Binary Tree
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Introduction to Spring Data JPA
Rate Limiting in Spring Cloud Netflix Zuul
Serialize Only Fields that meet a Custom Criteria with Jackson
Comparing Two HashMaps in Java