Table of Contents
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.