Difference between revisions of "JAVA: Read Text File"

From OnnoWiki
Jump to navigation Jump to search
(Created page with "There are multiple ways of writing and reading a text file. this is required while dealing with many applications. There are several ways to read a plain text file in Java e.g...")
 
Line 14: Line 14:
 
Let us discuss each of the above methods to a deeper depth and most importantly by implementing them via a clean java program.  
 
Let us discuss each of the above methods to a deeper depth and most importantly by implementing them via a clean java program.  
  
Method 1: Using BufferedReader class  
+
==Method 1: Using BufferedReader class==
  
 
This method reads text from a character-input stream. It does buffer for efficient reading of characters, arrays, and lines. The buffer size may be specified, or the default size may be used. The default is large enough for most purposes. In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to wrap a BufferedReader around any Reader whose read() operations may be costly, such as FileReaders and InputStreamReaders as shown below as follows:
 
This method reads text from a character-input stream. It does buffer for efficient reading of characters, arrays, and lines. The buffer size may be specified, or the default size may be used. The default is large enough for most purposes. In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to wrap a BufferedReader around any Reader whose read() operations may be costly, such as FileReaders and InputStreamReaders as shown below as follows:
Line 21: Line 21:
 
Example:
 
Example:
  
// Java Program to illustrate Reading from FileReader
+
// Java Program to illustrate Reading from FileReader
// using BufferedReader Class
+
// using BufferedReader Class
   
+
 
// Importing input output classes
+
  // Importing input output classes
import java.io.*;
+
import java.io.*;
   
+
 
// Main class
+
  // Main class
public class GFG {
+
public class GFG {
+
 
    // main driver method
+
    // main driver method
    public static void main(String[] args) throws Exception
+
    public static void main(String[] args) throws Exception
    {
+
    {
+
 
        // File path is passed as parameter
+
        // File path is passed as parameter
        File file = new File(
+
        File file = new File(
            "C:\\Users\\pankaj\\Desktop\\test.txt");
+
            "C:\\Users\\pankaj\\Desktop\\test.txt");
+
 
        // Note:  Double backquote is to avoid compiler
+
        // Note:  Double backquote is to avoid compiler
        // interpret words
+
        // interpret words
        // like \test as \t (ie. as a escape sequence)
+
        // like \test as \t (ie. as a escape sequence)
+
 
        // Creating an object of BufferedReader class
+
        // Creating an object of BufferedReader class
        BufferedReader br
+
        BufferedReader br
            = new BufferedReader(new FileReader(file));
+
            = new BufferedReader(new FileReader(file));
+
 
        // Declaring a string variable
+
        // Declaring a string variable
        String st;
+
        String st;
        // Condition holds true till
+
        // Condition holds true till
        // there is character in a string
+
        // there is character in a string
        while ((st = br.readLine()) != null)
+
        while ((st = br.readLine()) != null)
+
 
            // Print the string
+
            // Print the string
            System.out.println(st);
+
            System.out.println(st);
    }
+
    }
}
+
}
 +
 
 
Output:
 
Output:
  
 
If you want to code refer to GeeksforGeeks
 
If you want to code refer to GeeksforGeeks
Method 2: Using FileReader class
+
 
 +
==Method 2: Using FileReader class==
  
 
Convenience class for reading character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate.  
 
Convenience class for reading character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate.  
Line 68: Line 70:
 
FileReader(FileDescriptor fd): Creates a new FileReader, given the FileDescriptor to read from
 
FileReader(FileDescriptor fd): Creates a new FileReader, given the FileDescriptor to read from
 
FileReader(String fileName): Creates a new FileReader, given the name of the file to read from
 
FileReader(String fileName): Creates a new FileReader, given the name of the file to read from
 +
 
Example:
 
Example:
  
// Java Program to Illustrate reading from
+
// Java Program to Illustrate reading from
// FileReader using FileReader class
+
// FileReader using FileReader class
   
+
 
// Importing input output classes
+
  // Importing input output classes
import java.io.*;
+
import java.io.*;
   
+
 
// Main class
+
  // Main class
// ReadingFromFile
+
// ReadingFromFile
public class GFG {
+
public class GFG {
+
 
    // Main driver method
+
    // Main driver method
    public static void main(String[] args) throws Exception
+
    public static void main(String[] args) throws Exception
    {
+
    {
+
 
        // Passing the path to the file as a parameter
+
        // Passing the path to the file as a parameter
        FileReader fr = new FileReader(
+
        FileReader fr = new FileReader(
            "C:\\Users\\pankaj\\Desktop\\test.txt");
+
            "C:\\Users\\pankaj\\Desktop\\test.txt");
+
 
        // Declaring loop variable
+
        // Declaring loop variable
        int i;
+
        int i;
        // Holds true till there is nothing to read
+
        // Holds true till there is nothing to read
        while ((i = fr.read()) != -1)
+
        while ((i = fr.read()) != -1)
+
 
            // Print all the content of a file
+
            // Print all the content of a file
            System.out.print((char)i);
+
            System.out.print((char)i);
    }
+
    }
}
+
}
 +
 
 
Output:
 
Output:
  
 
If you want to code refer to GeeksforGeeks
 
If you want to code refer to GeeksforGeeks
Method 3: Using Scanner class
+
 
 +
==Method 3: Using Scanner class==
  
 
A simple text scanner that can parse primitive types and strings using regular expressions. A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace. The resulting tokens may then be converted into values of different types using the various next methods.
 
A simple text scanner that can parse primitive types and strings using regular expressions. A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace. The resulting tokens may then be converted into values of different types using the various next methods.
  
Example 1: With using loops
+
===Example 1: With using loops===
 +
 
 +
// Java Program to illustrate
 +
// reading from Text File
 +
// using Scanner Class
 +
import java.io.File;
 +
import java.util.Scanner;
 +
public class ReadFromFileUsingScanner
 +
{
 +
  public static void main(String[] args) throws Exception
 +
  {
 +
    // pass the path to the file as a parameter
 +
    File file = new File("C:\\Users\\pankaj\\Desktop\\test.txt");
 +
    Scanner sc = new Scanner(file);
 +
 
 +
    while (sc.hasNextLine())
 +
      System.out.println(sc.nextLine());
 +
  }
 +
}
  
// Java Program to illustrate
 
// reading from Text File
 
// using Scanner Class
 
import java.io.File;
 
import java.util.Scanner;
 
public class ReadFromFileUsingScanner
 
{
 
  public static void main(String[] args) throws Exception
 
  {
 
    // pass the path to the file as a parameter
 
    File file = new File("C:\\Users\\pankaj\\Desktop\\test.txt");
 
    Scanner sc = new Scanner(file);
 
 
    while (sc.hasNextLine())
 
      System.out.println(sc.nextLine());
 
  }
 
}
 
 
Output:
 
Output:
  
 
If you want to code refer to GeeksforGeeks
 
If you want to code refer to GeeksforGeeks
Example 2: Without using loops
 
  
// Java Program to illustrate reading from FileReader
+
===Example 2: Without using loops===
// using Scanner Class reading entire File
+
 
// without using loop
+
// Java Program to illustrate reading from FileReader
import java.io.File;
+
// using Scanner Class reading entire File
import java.io.FileNotFoundException;
+
// without using loop
import java.util.Scanner;
+
import java.io.File;
   
+
import java.io.FileNotFoundException;
public class ReadingEntireFileWithoutLoop
+
import java.util.Scanner;
{
+
 
  public static void main(String[] args)
+
  public class ReadingEntireFileWithoutLoop
                        throws FileNotFoundException
+
{
  {
+
  public static void main(String[] args)
    File file = new File("C:\\Users\\pankaj\\Desktop\\test.txt");
+
                        throws FileNotFoundException
    Scanner sc = new Scanner(file);
+
  {
+
    File file = new File("C:\\Users\\pankaj\\Desktop\\test.txt");
    // we just need to use \\Z as delimiter
+
    Scanner sc = new Scanner(file);
    sc.useDelimiter("\\Z");
+
 
+
    // we just need to use \\Z as delimiter
    System.out.println(sc.next());
+
    sc.useDelimiter("\\Z");
  }
+
 
}
+
    System.out.println(sc.next());
 +
  }
 +
}
 +
 
 
Output:
 
Output:
  
 
If you want to code refer to GeeksforGeeks
 
If you want to code refer to GeeksforGeeks
Method 4: Reading the whole file in a List
+
 
 +
==Method 4: Reading the whole file in a List==
  
 
Read all lines from a file. This method ensures that the file is closed when all bytes have been read or an I/O error, or other runtime exception, is thrown. Bytes from the file are decoded into characters using the specified charset.  
 
Read all lines from a file. This method ensures that the file is closed when all bytes have been read or an I/O error, or other runtime exception, is thrown. Bytes from the file are decoded into characters using the specified charset.  
Line 166: Line 175:
 
Example
 
Example
  
// Java program to illustrate reading data from file
+
// Java program to illustrate reading data from file
// using nio.File
+
// using nio.File
import java.util.*;
+
import java.util.*;
import java.nio.charset.StandardCharsets;
+
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
+
import java.nio.file.*;
import java.io.*;
+
import java.io.*;
public class ReadFileIntoList
+
public class ReadFileIntoList
{
+
{
  public static List<String> readFileInList(String fileName)
+
  public static List<String> readFileInList(String fileName)
  {
+
  {
+
 
    List<String> lines = Collections.emptyList();
+
    List<String> lines = Collections.emptyList();
    try
+
    try
    {
+
    {
      lines =
+
      lines =
      Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8);
+
        Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8);
    }
+
    }
+
 
    catch (IOException e)
+
    catch (IOException e)
    {
+
    {
+
 
      // do something
+
      // do something
      e.printStackTrace();
+
      e.printStackTrace();
    }
+
    }
    return lines;
+
    return lines;
  }
+
  }
  public static void main(String[] args)
+
  public static void main(String[] args)
  {
+
  {
    List l = readFileInList("C:\\Users\\pankaj\\Desktop\\test.java");
+
    List l = readFileInList("C:\\Users\\pankaj\\Desktop\\test.java");
+
 
    Iterator<String> itr = l.iterator();
+
    Iterator<String> itr = l.iterator();
    while (itr.hasNext())
+
    while (itr.hasNext())
      System.out.println(itr.next());
+
      System.out.println(itr.next());
  }
+
  }
}
+
}
 +
 
 
Output:
 
Output:
  
 
If you want to code refer to GeeksforGeeks
 
If you want to code refer to GeeksforGeeks
Method 5: Read a text file as String
+
 
 +
==Method 5: Read a text file as String==
  
 
Example
 
Example
  
// Java Program to illustrate
+
// Java Program to illustrate
// reading from text file
+
// reading from text file
// as string in Java
+
// as string in Java
package io;
+
package io;
   
+
 
import java.nio.file.*;;
+
  import java.nio.file.*;;
   
+
 
public class ReadTextAsString {
+
  public class ReadTextAsString {
    
+
   
  public static String readFileAsString(String fileName)throws Exception
+
   public static String readFileAsString(String fileName)throws Exception
  {
+
  {
    String data = "";
+
    String data = "";
    data = new String(Files.readAllBytes(Paths.get(fileName)));
+
    data = new String(Files.readAllBytes(Paths.get(fileName)));
    return data;
+
    return data;
  }
+
  }
+
 
  public static void main(String[] args) throws Exception
+
  public static void main(String[] args) throws Exception
  {
+
  {
    String data = readFileAsString("C:\\Users\\pankaj\\Desktop\\test.java");
+
    String data = readFileAsString("C:\\Users\\pankaj\\Desktop\\test.java");
    System.out.println(data);
+
    System.out.println(data);
  }
+
  }
}
+
}
 +
 
 
Output:
 
Output:
  

Revision as of 13:44, 7 May 2022

There are multiple ways of writing and reading a text file. this is required while dealing with many applications. There are several ways to read a plain text file in Java e.g. you can use FileReader, BufferedReader, or Scanner to read a text file. Every utility provides something special e.g. BufferedReader provides buffering of data for fast reading, and Scanner provides parsing ability.

Methods:

Using BufferedReader class Using Scanner class Using File Reader class Reading the whole file in a List Read a text file as String We can also use both BufferReader and Scanner to read a text file line by line in Java. Then Java SE 8 introduces another Stream class java.util.stream.Stream which provides a lazy and more efficient way to read a file.

Tip Note: Practices of writing good code like flushing/closing streams, Exception-Handling etc, have been avoided for better understanding of codes by beginners as well.

Let us discuss each of the above methods to a deeper depth and most importantly by implementing them via a clean java program.

Method 1: Using BufferedReader class

This method reads text from a character-input stream. It does buffer for efficient reading of characters, arrays, and lines. The buffer size may be specified, or the default size may be used. The default is large enough for most purposes. In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to wrap a BufferedReader around any Reader whose read() operations may be costly, such as FileReaders and InputStreamReaders as shown below as follows:

BufferedReader in = new BufferedReader(Reader in, int size); Example:

// Java Program to illustrate Reading from FileReader
// using BufferedReader Class
 
// Importing input output classes
import java.io.*;
 
// Main class
public class GFG {
 
    // main driver method
    public static void main(String[] args) throws Exception
    {
 
        // File path is passed as parameter
        File file = new File(
            "C:\\Users\\pankaj\\Desktop\\test.txt");
 
        // Note:  Double backquote is to avoid compiler
        // interpret words
        // like \test as \t (ie. as a escape sequence)
 
        // Creating an object of BufferedReader class
        BufferedReader br
            = new BufferedReader(new FileReader(file));
 
        // Declaring a string variable
        String st;
        // Condition holds true till
        // there is character in a string
        while ((st = br.readLine()) != null)
 
            // Print the string
            System.out.println(st);
    }
}

Output:

If you want to code refer to GeeksforGeeks

Method 2: Using FileReader class

Convenience class for reading character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate.

Constructors defined in this class are as follows:

FileReader(File file): Creates a new FileReader, given the File to read from FileReader(FileDescriptor fd): Creates a new FileReader, given the FileDescriptor to read from FileReader(String fileName): Creates a new FileReader, given the name of the file to read from

Example:

// Java Program to Illustrate reading from
// FileReader using FileReader class
 
// Importing input output classes
import java.io.*;
 
// Main class
// ReadingFromFile
public class GFG {
 
    // Main driver method
    public static void main(String[] args) throws Exception
    {
 
        // Passing the path to the file as a parameter
        FileReader fr = new FileReader(
            "C:\\Users\\pankaj\\Desktop\\test.txt");
 
        // Declaring loop variable
        int i;
        // Holds true till there is nothing to read
        while ((i = fr.read()) != -1)
 
            // Print all the content of a file
            System.out.print((char)i);
    }
}

Output:

If you want to code refer to GeeksforGeeks

Method 3: Using Scanner class

A simple text scanner that can parse primitive types and strings using regular expressions. A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace. The resulting tokens may then be converted into values of different types using the various next methods.

Example 1: With using loops

// Java Program to illustrate
// reading from Text File
// using Scanner Class
import java.io.File;
import java.util.Scanner;
public class ReadFromFileUsingScanner
{
  public static void main(String[] args) throws Exception
  {
    // pass the path to the file as a parameter
    File file = new File("C:\\Users\\pankaj\\Desktop\\test.txt");
    Scanner sc = new Scanner(file);
 
    while (sc.hasNextLine())
      System.out.println(sc.nextLine());
  }
}

Output:

If you want to code refer to GeeksforGeeks

Example 2: Without using loops

// Java Program to illustrate reading from FileReader
// using Scanner Class reading entire File
// without using loop
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
 
public class ReadingEntireFileWithoutLoop
{
  public static void main(String[] args)
                        throws FileNotFoundException
  {
    File file = new File("C:\\Users\\pankaj\\Desktop\\test.txt");
    Scanner sc = new Scanner(file);
 
    // we just need to use \\Z as delimiter
    sc.useDelimiter("\\Z");
 
    System.out.println(sc.next());
  }
}

Output:

If you want to code refer to GeeksforGeeks

Method 4: Reading the whole file in a List

Read all lines from a file. This method ensures that the file is closed when all bytes have been read or an I/O error, or other runtime exception, is thrown. Bytes from the file are decoded into characters using the specified charset.

Syntax:

public static List readAllLines(Path path,Charset cs)throws IOException This method recognizes the following as line terminators:

\u000D followed by \u000A, CARRIAGE RETURN followed by LINE FEED \u000A, LINE FEED \u000D, CARRIAGE RETURN Example

// Java program to illustrate reading data from file
// using nio.File
import java.util.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.io.*;
public class ReadFileIntoList
{
  public static List<String> readFileInList(String fileName)
  {
 
    List<String> lines = Collections.emptyList();
    try
    {
      lines =
       Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8);
    }
 
    catch (IOException e)
    {
 
      // do something
      e.printStackTrace();
    }
    return lines;
  }
  public static void main(String[] args)
  {
    List l = readFileInList("C:\\Users\\pankaj\\Desktop\\test.java");
 
    Iterator<String> itr = l.iterator();
    while (itr.hasNext())
      System.out.println(itr.next());
  }
}

Output:

If you want to code refer to GeeksforGeeks

Method 5: Read a text file as String

Example

// Java Program to illustrate
// reading from text file
// as string in Java
package io;
 
import java.nio.file.*;;
 
public class ReadTextAsString {
   
  public static String readFileAsString(String fileName)throws Exception
  {
    String data = "";
    data = new String(Files.readAllBytes(Paths.get(fileName)));
    return data;
  }
 
  public static void main(String[] args) throws Exception
  {
    String data = readFileAsString("C:\\Users\\pankaj\\Desktop\\test.java");
    System.out.println(data);
  }
}

Output:

If you want to code refer to GeeksforGeeks


Referensi