Quantcast
Channel: JavaBeat » Java 7.0
Viewing all articles
Browse latest Browse all 10

Reading file asynchronously in Java

$
0
0

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.

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();
    }
  }
}

Buy Pro Java 7 NIO.2

Pro Java 7 NIO.2 by Anghel Leonard (buy from Amazon.com / Kindle Edition )

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.


Viewing all articles
Browse latest Browse all 10

Latest Images

Trending Articles





Latest Images