Reading file asynchronously in Java

SHARE & COMMENT :

We all are familiar with reading/writing file in a synchronous way. In Java 7 a new API was added to read/write the contents of the file asynchronously. The API is AsynchronousFileChannel.

also read:

In this example lets look at how to read the contents of the file asynchronously. There are two approaches to read the contents asynchronously:
1. To use Future class to wait for the result of the read operation.
2. To use a callback defined by the CompletionHandler to process the result of the Asynchronous operation.

//Using Future class to read the contents of the file.
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousFileChannel;
import java.nio.charset.Charset;
import java.nio.file.*;
import java.util.concurrent.*;

public class AsyncFutureRead {

  public static void main(String[] args) {

    //Buffer to read the contents from the file.
    ByteBuffer buffer = ByteBuffer.allocate(100);

    //The file to read the contents from.
    Path path = Paths.get('D:/tests/test.txt');

    //Creating the asynchronous channel to the file which allows reading and writing of content.
    try(AsynchronousFileChannel asyncChannel = AsynchronousFileChannel.open(path)){

      //Returns a Future instance which can be used to read the contents of the file.
      Future<Integer> fileResult = asyncChannel.read(buffer, 0);

      //Waiting for the file reading to complete.
      while(!fileResult.isDone()){
        System.out.println('Waiting to complete the file reading ...');
      }

      //Print the number of bytes read.
      System.out.println('Number of bytes read: '+fileResult.get());

      //Reset the current position of the buffer to the beginning and the limit to the current position.
      buffer.flip();

      //Decode the contents of the byte buffer.
      System.out.println('Contents of file: ');
      System.out.println(Charset.defaultCharset().decode(buffer));

    }catch(IOException | InterruptedException | ExecutionException ex){
      ex.printStackTrace();
    }
  }
}

Pro Java 7 NIO.2 addresses the three primary elements that offer new input/output (I/O) APIs in Java 7, giving you the skills to write robust, scalable Java applications.

Comments

comments

About Mohamed Sanaulla

In his day job he works on developing enterprise applications using ADF. He is also the moderator of JavaRanch forums and an avid blogger.

Comments

  1. Hi, I want to read the file content by its line number. can you help me to solve this scenario?

  2. Drop the while loop!!! You are polling!!! The future.isDone() is useful to know if it’s finished or not (when you can do something else in the meantime). If you are going to wait for the answer anyway, it’s better to call future.get() directly, that will block until the data is ready.

Trackbacks

  1. [...] APIs: This chapters covers performing Asynchronous read and write operations on file and also Asynchronous socket [...]

  2. JavaPins says:

    Reading file asynchronously in Java…

    Thank you for submitting this cool story – Trackback from JavaPins…

  3. […] Reading file asynchronously in Java […]

Speak Your Mind

*

Close
Please support the site
By clicking any of these buttons you help our site to get better