How to read file in Java – BufferedReader

In this article, we will show you how to use java.io.BufferedReader to read content from a file

1. Files.newBufferedReader (Java 8)

In Java 8, there is a new method Files.newBufferedReader(Paths.get("file")) to return a BufferedReader

filename.txt

A
B
C
D
E
FileExample1.java

package com.mkyong;

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class FileExample1 {

    public static void main(String[] args) {

        StringBuilder sb = new StringBuilder();

        try (BufferedReader br = Files.newBufferedReader(Paths.get("filename.txt"))) {

            // read line by line
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line).append("\n");
            }

        } catch (IOException e) {
            System.err.format("IOException: %s%n", e);
        }

        System.out.println(sb);

    }

}

Output


A
B
C
D
E

2. BufferedReader

2.1 A classic BufferedReader with JDK 1.7 try-with-resources to auto close the resources.

FileExample2.java

package com.mkyong;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileExample2 {

    public static void main(String[] args) {

        try (FileReader reader = new FileReader("filename.txt");
             BufferedReader br = new BufferedReader(reader)) {

            // read line by line
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }

        } catch (IOException e) {
            System.err.format("IOException: %s%n", e);
        }
    }

}

2.2 In the old days, we have to close everything manually.

FileExample3.java

package com.mkyong.calculator;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileExample3 {

    public static void main(String[] args) {

        BufferedReader br = null;
        FileReader fr = null;

        try {

            fr = new FileReader("filename.txt");
            br = new BufferedReader(fr);

            // read line by line
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }

        } catch (IOException e) {
            System.err.format("IOException: %s%n", e);
        } finally {
            try {
                if (br != null)
                    br.close();

                if (fr != null)
                    fr.close();
            } catch (IOException ex) {
                System.err.format("IOException: %s%n", ex);
            }
        }

    }

}

References

62 comments on “How to read file in Java – BufferedReader

  1. Hey @mkyong, Thanks for all the wonderful work you are doing. A request if I may, would you be able to write some code to sort a csv on two columns(including datetime columns) please? I have written one and it works, but not very efficient. Thanks

    Reply
  2. I am using bufferReader to read a 1gb file.
    I do not want to keep entire file in memory until it get processed instead.

    I want to keep data in memory as equal to my custom buffer size =let’s say 5*103kb where 103kb is the one line size.

    When I use bufferReader.lines().count() ..I assume that it should return no’s of line=5 as my buffer size is 5*103 and each line has 103kb of text data.
    But it returns the count of entire files lines I.e (1gb*1024*1024/103).

    That what is use of buffer?? BufferReader.lines() do not respect the bufferSize????

    Could you please help and elaborate??

    Thanks,
    Rk

    Reply
  3. java how to learn.. anyone tell me.. best online website

    Reply
  4. I doubt that the statement “try (BufferedReader br = new BufferedReader(new FileReader(FILENAME)))” will not close both BufferedReader and FileReader. To close both the readers, we need to use “try(FileReader fr = new FileReader(FILENAME); BufferedReader br = new BufferedReader(fr))”. Please check.

    Reply
    1. Thanks, article is updated.

      try (FileReader reader = new FileReader("filename.txt");
      BufferedReader br = new BufferedReader(reader))

      Reply
  5. Thank you for this blog, you have a very good coding style.
    It helped me to pick up the code easily.

    Reply
  6. can someone explain me why do i have to create a FileReader object containing the file and then the bufferedreader containing the FileReader i just created rather than just creating the bufferedreader with the file?

    i mean why this:
    FileReader f=new FileReader(file);
    BufferedReader b= new BufferedReader(f);

    rather than this:
    BufferedReader b= new BufferedReader(b);

    thanks in advance.

    Reply
  7. Excelent!
    just for comment, in your first example, the line
    “br = new BufferedReader(new FileReader(FILENAME));”
    wasn’t necessary!

    Thank you!
    I learn a lot with you!

    Reply
  8. public Ceg(String file) {

    Scanner scanner = null;

    try {

    scanner = new Scanner(new File(file));

    } catch (FileNotFoundException ex) {

    System.out.println(“Allomany megnyitasi hiba!!”);

    System.exit(1);

    }

    while (scanner.hasNextLine()) {

    String line = scanner.nextLine();

    if (line.length() != 0) {

    System.out.println(“***Line: ” + line);

    StringTokenizer stk = new StringTokenizer(line, “, .;:?!”);

    int id = Integer.parseInt(stk.nextToken());

    String vezeteknev = stk.nextToken();

    String keresztnev = stk.nextToken();

    int eletkor = Integer.parseInt(stk.nextToken());

    String beosztas = stk.nextToken();

    Alkalmazott a = new Alkalmazott(id, vezeteknev, keresztnev, eletkor, beosztas);

    this.alkalmazott.add(a);

    }

    }

    }

    Reply
      1. I created the file. I have used “thing.txt” and I have used “C:UsersJohnWorkspaceLunaSR2ReadFilething.txt”

        Reply
  9. Very Good article. Is there a way to access folder using authenitcation. Right now I’m using smb api for this. But it would be easier if the authentication can be done in this program.

    Reply
  10. Great and to the point, but I’m stuck on a ‘file not found’ exception because I put my file inside the src folder like this: src/res_folder/file.txt Does anyone know how to access that? I tried things like getResourceAsStream, get Resource, classloader, and putting the path as “/res_folder/file.txt” and other things but still have the same error.

    Reply
    1. ok, after hours and hours of looking I somehow accidentally figured it out myself, so I’ll just share it here for anyone else.
      At this line: br = new BufferedReader(new FileReader(“C:\testing.txt”));
      I changed it to: br = new BufferedReader(new FileReader(new File(“src/res/myfile.txt”)));

      This works for me, but since I do more Android programming, I’m not sure if this is the best approach.

      Reply
  11. hi I am very new to java and I would like to know how to write a program that would move multiple files from a different folder, delete the files from the previous folder and copy and rename those files in another folder

    Reply
  12. you are printing –

    System.out.println(sCurrentLine);

    what if i want to store them in string array ?

    Reply
    1. String [] aray = new String[10]; // 10 for example

      try (BufferedReader br = new BufferedReader(new FileReader(“C:\testing.txt”)))
      {

      String sCurrentLine;
      int count = 0;
      while ((sCurrentLine = br.readLine()) != null) {
      array[count++] = sCurrentLine;
      }

      } catch (IOException e) {
      e.printStackTrace();
      }

      Reply
  13. Very good and “to the point” article! Congrats!

    Reply
  14. Congratulations, for your posts, is has helped me a lot!

    Reply
  15. Hello sir pls send me code of BufferReader…Sir please…

    Reply
  16. Hii,
    try (BufferedReader br = new BufferedReader(new FileReader(“C:\testing.txt”))),

    how to close this connection in finally? or else it will automatically closes.

    Reply
  17. hii!concerning the hangman game .. i am trying to write a method that reads a file then adds a word and its hint to the file but taking into consideration that this word should not exist in the file any help ?

    Reply
  18. can anyone say how to write a java code for wordnet that it should read the text file and display the synonyms for each word.

    Reply
  19. What if when I want to read in file not from newline to newline but from some other token to token? Like from LABEL to LABEL etc. What tool should I use then?

    Reply
    1. i guess u have to use Scanner to read the file.

      public class readFile
      {
      public static void main(String args[])
      {
      File f = new File(filePath);
      Scanner read = new Scanner(f).useDelimeter(“put anything as a delimeter eg: ##”);
      String content =read.next();
      while((content=read.next()).hasNext())
      {
      content += content;
      }
      }
      }

      Reply
  20. Hi, your codes works fine but i am getting an encrypted version, so how can i get non-encrypted version.

    Reply
    1. Hi, Goodbye, Thankyou, what the heck???
      🙁 otherwise known as :(((

      Reply
  21. How can you adapt the code to allow the variable “sCurrentline”, to be manipulated through methods such as, .split(), out side of the try-catch statement. It will not even print “sCurrentLine”, unless it is in side the try-catch statement.

    Reply
  22. Hi, where the txt file should be placed??
    I created a txt file on the same folder of the java files and the application always throw the FileNotFoundException. I tried different names, different format files, but it never finds the file.

    Thanks

    Reply
    1. you can save it anywhere but you have to save it with .java extension

      Reply
  23. Finally after much searching, you answered my question, Mike !
    Thanks !
    There are a lot of people out in the web asking the same question.
    When they and, (up till a few moments ago), myself included, try to “import” a simple text file into an Eclipse project, we were all receiving “file not found”.
    Being new to Java I was amazed that this was such an “issue” for eclipse. I like Eclipse but something so fundamental, shouldn’t be so frustratingly hard. I guess the Devs are busy working on other more urgent issues and we cant complain as it is a free and in reality a good product.
    Many thanks ! (c:\\testing) 🙂

    Reply
  24. In your example, you should make sure to close the BufferedReader, otherwise the file may be lock not readable by some other process.

    so
    ….
    while ((sCurrentLine = br.readLine()) != null) {
    System.out.println(sCurrentLine);
    }

    br.close();
    …..

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *