From 5ad3d793fcb7c3468f65df7d8805c55f8ee839eb Mon Sep 17 00:00:00 2001 From: Gaurav Date: Sun, 3 Jan 2021 14:47:30 +0530 Subject: [PATCH] Add new blogpost on BufferReader --- ...2021-01-03-read-file-using-bufferreader.md | 232 ++++++++++++++++++ .../read-file-using-bufferreader.png | Bin 0 -> 23115 bytes 2 files changed, 232 insertions(+) create mode 100644 _posts/java-files-io/2021-01-03-read-file-using-bufferreader.md create mode 100644 assets/images/2021-01-03/read-file-using-bufferreader.png diff --git a/_posts/java-files-io/2021-01-03-read-file-using-bufferreader.md b/_posts/java-files-io/2021-01-03-read-file-using-bufferreader.md new file mode 100644 index 0000000..875c26c --- /dev/null +++ b/_posts/java-files-io/2021-01-03-read-file-using-bufferreader.md @@ -0,0 +1,232 @@ +--- +layout: post +title: "How To Read File Using BufferReader In Java?" +author: gaurav +image: assets/images/2021-01-03/read-file-using-bufferreader.png +categories: [Java, Java File IO] +description: "In this article we will see how to read a file using the `BufferReader` class in Java." + +--- + +In this article we will see how to read a file using the `BufferReader `class in Java. + +`BufferReader` class reads text from a character-input stream. Because of buffering characters it provides an efficient way to read characters, arrays, and lines. + +`BufferReader` provides two important methods to read from the file. i.e `read()` and `readLine()`. + +You can specify the bufferSize in `BufferReader `constructer. But as [motioned in the docs](https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html), +>The default is large enough for most purposes. + +## BufferReader `read()` method + +`BufferReader` `read()` method reads a single character. IT returns the `int` representation of the char in range of 0 to 65535 (0x00-0xffff), or -1 if the end of the stream has been reached. + +We can cast `int` value returned by `read()` method to `char` to get the character value. + +I have given an example to read a file character by character using the `read()` method of the `BufferReader` class +```java +package com.coderolls; + +import java.io.*; + +/** + * A java program to read file character by character using the + * read() method of the BufferReader Class. + * + * @author Gaurav Kukade at coderolls.com + */ +public class BufferReaderReadMethodExample { + + public static void main(String[] args) { + + BufferedReader bufferedReader = null; + try { + bufferedReader = new BufferedReader(new FileReader("F:\\sample-text.txt")); + + int i; + //read each character using read() method and print it + while((i=bufferedReader.read())!=-1){ + System.out.print((char)i); + } + + }catch (IOException e) { + e.printStackTrace(); + }finally { + try { + bufferedReader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} +``` +Output +``` +Welcome to coderolls.com! +``` +See [this example on GitHub](https://github.com/coderolls/blogpost-coding-examples/blob/main/java-files-io/BufferReaderReadMethodExample.java). + +## BufferReader `readLine()` method +As specified in the name, this method reads a line of text. + +A line is considered to be terminated by any one of a line feed ('\n') or a carriage return ('\r'). + +The `readLine()` method returns the content of a line as string except the line terminating character (i.e. `\n` or `\r`). Or it will return `null` if the end of the stream has been reached. + +I have given below an example to read file line by line using the `readLine()` method + +```java +package com.coderolls; + +import java.io.*; + +/** + * A java program to read file line by line using the + * readLine() method of the BufferReader Class. + * + * @author Gaurav Kukade at coderolls.com + * + */ +public class BufferReaderReadLineMethodExample { + + public static void main(String[] args) { + + BufferedReader bufferedReader = null; + try { + bufferedReader = new BufferedReader(new FileReader("F:\\sample-text-two-lines.txt")); + + String line; + //read each line using readLine() method and print it + while((line = bufferedReader.readLine()) != null){ + System.out.println(line); + } + + }catch (IOException e) { + e.printStackTrace(); + }finally { + try { + bufferedReader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} +``` +Output +```java +Welcome to coderolls.com! + +Visit coderolls to read more coding tutorials! +``` +See [this example on GitHub](https://github.com/coderolls/blogpost-coding-examples/blob/main/java-files-io/BufferReaderReadLineMethodExample.java). + +I have given below a combine example of the Java `BufferReader` `read()` and `readLine()` method below + +```java +package com.coderolls; + +import java.io.*; + +public class BufferReaderExanple { + + public static void main(String[] args) { + BufferedReader bufferedReader = null; + try { + bufferedReader = new BufferedReader(new FileReader("F:\\sample-text-two-lines.txt")); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + readFileCharacterByCharacter(bufferedReader); + + readFileLineByLine(bufferedReader); + + try { + bufferedReader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * A method to read file content character by character using the BufferReader + * read() method + * + * @param bufferedReader + */ + public static void readFileCharacterByCharacter(BufferedReader bufferedReader) { + try { + int i; + //read each character using read() method and print it + while((i=bufferedReader.read())!=-1){ + System.out.print((char)i); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * A method to read file content line by line using the BufferReader + * readLine() method + * + * @param bufferedReader + */ + public static void readFileLineByLine(BufferedReader bufferedReader) { + + try { + String line; + //read each line using readLine() method and print it + while((line = bufferedReader.readLine()) != null){ + System.out.println(line); + } + }catch (IOException e) { + e.printStackTrace(); + } + } +} +``` + +See [this example on GitHub](https://github.com/coderolls/blogpost-coding-examples/blob/main/java-files-io/BufferReaderExanple.java). + +## `newBufferedReader()` method in Java 8 + +In Java 1.8 and above you can get a `BufferReader` instance using the `newBufferedReader()` method of the `java.nio.file.Files` class. + +## Conclusion + +You can read file character by character using the `read()` method of the `BufferReader`Class. + +`read()` method returns an integer value, you have to cast it to `char` to get character value. + +Also, you can read file line by line using the `readLine()` method of the `BufferReader`Class + +`readLine()` methods returns the line content as string, except the line terminating character + +You can visit my [YouTube channel 'coderolls'](https://www.youtube.com/channel/UCl31HHUdQbSHOQfc9L-wo3w?view_as=subscriber?sub_confirmation=1) to find more video tutorials. + +-------------- + +You can support me by [giving a cup of Coffee ☕](https://www.paypal.me/GauravKukade) + +#### Related Articles + +- [8 Basic GIT Commands Every Newbie Developer Must Know](https://coderolls.com/basic-git-commands/) + +- [How To Reverse A String In Java (5 ways)](https://coderolls.com/reverse-a-string-in-java/) + +- [How To Create UUID in Java?](https://coderolls.com/create-uuid-in-java/) + +- [Learn About Java String Pool And intern() Method](https://coderolls.com/java-string-pool-and-intern-method/) +- [How Do I Compare Strings In Java](https://coderolls.com/compare-strings-in-java/) + +- [Compare Two Strings Lexicographically In Java](https://coderolls.com/compare-two-strings-lexicographically-in-java/) +- [Difference Between StringBuffer and StringBuilder class](https://coderolls.com/difference-between-stringbuffer-and-stringbuilder/) + +- [8 Basic GIT Commands Every Newbie Developer Must Know](https://coderolls.com/basic-git-commands/) + +- [How To Create UUID in Java?](https://coderolls.com/create-uuid-in-java/) diff --git a/assets/images/2021-01-03/read-file-using-bufferreader.png b/assets/images/2021-01-03/read-file-using-bufferreader.png new file mode 100644 index 0000000000000000000000000000000000000000..1b77eed2e36a5b1a5a7902d2fefc3b32ea3c4d30 GIT binary patch literal 23115 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