1. Hãy ủng hộ PhienBanMoi.Com bằng cách LIKE trang FANPAGE , GOOGLE+ dưới mỗi bài viết hoặc chia sẻ website nếu thấy hữu ích. Trân trọng cảm ơn!
  2. [Thông Báo] Tuyển thành viên viết bài KIẾM TIỀN trên PhienBanMoi.Com


    Nhằm mục đích phát triển Phienbanmoi.com hơn nữa, có thêm các bài viết thông tin thực sự hữu ích từ những thành viên tích cực. BQT đã quyến định tạo ra cơ hội kiếm tiền từ các bài viết được đăng tải và chia sẻ trên diễn đàn

3 cách đọc file sử dụng New IO

Thảo luận trong 'Java & JSP' bắt đầu bởi No Nguyễn, 22 Tháng mười 2014.

  1. No Nguyễn Admin

    1,431
    2,094
    213

    Lượt xem: 8,317


    Bắt đầu từ phiên bản Java 1.4 Sun đã bổ sung thêm một cách mới để quản lý các thao tác vào ra.

    NIO được xây dựng dựa trên hai hạng mục cơ bản là: buffer và channel. Một vùng đệm (buffer) lưu trữ dữ liệu. Một kênh (channel) biểu diễn một liên kết mở tới một thiết bị vào ra mới, như tệp tin hoặc một socket. Để sử dụng NIO, ta phải nhận một kênh truyền tới một thiết bị vào ra và một vùng đệm để lưu trữ dữ liệu. Sau đó ta có thể thực hiện thao tác trên vùng đệm để vào và ra dữ liệu

    This example shows how we have been reading a text file using old I/O library APIs. It uses a BufferedReader object for reading. Another way can be using InputStream implementation.
    IO
    Mã:
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    public class WithoutNIOExample
    {
        public static void main(String[] args)
        {
            BufferedReader br = null;
            String sCurrentLine = null;
            try
            {
                br = new BufferedReader(
                new FileReader("test.txt"));
                while ((sCurrentLine = br.readLine()) != null)
                {
                    System.out.println(sCurrentLine);
                }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                try
                {
                    if (br != null)
                    br.close();
                } catch (IOException ex)
                {
                    ex.printStackTrace();
                }
            }
        }
    }
    
    NIO

    1) Read a small file in buffer of file size
    Mã:
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    public class ReadFileWithFileSizeBuffer
    {
        public static void main(String args[])
        {
            try
            {
                RandomAccessFile aFile = new RandomAccessFile(
                                "test.txt","r");
                FileChannel inChannel = aFile.getChannel();
                long fileSize = inChannel.size();
                ByteBuffer buffer = ByteBuffer.allocate((int) fileSize);
                inChannel.read(buffer);
                buffer.rewind();
                buffer.flip();
                for (int i = 0; i < fileSize; i++)
                {
                    System.out.print((char) buffer.get());
                }
                inChannel.close();
                aFile.close();
            }
            catch (IOException exc)
            {
                System.out.println(exc);
                System.exit(1);
            }
        }
    }
    
    2) Read a large file in chunks with fixed size buffer
    Mã:
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    public class ReadFileWithFixedSizeBuffer
    {
        public static void main(String[] args) throws IOException
        {
            RandomAccessFile aFile = new RandomAccessFile
                    ("test.txt", "r");
            FileChannel inChannel = aFile.getChannel();
            ByteBuffer buffer = ByteBuffer.allocate(1024);
            while(inChannel.read(buffer) > 0)
            {
                buffer.flip();
                for (int i = 0; i < buffer.limit(); i++)
                {
                    System.out.print((char) buffer.get());
                }
                buffer.clear(); // do something with the data ,clear/compact it.
            }
            inChannel.close();
            aFile.close();
        }
    }
    
    3) Faster file copy with mapped byte buffer

    Mã:
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;
    public class ReadFileWithMappedByteBuffer
    {
        public static void main(String[] args) throws IOException
        {
            RandomAccessFile aFile = new RandomAccessFile
                    ("test.txt", "r");
            FileChannel inChannel = aFile.getChannel();
            MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
            buffer.load();
            for (int i = 0; i < buffer.limit(); i++)
            {
                System.out.print((char) buffer.get());
            }
            buffer.clear(); // do something with the data and clear/compact it.
            inChannel.close();
            aFile.close();
        }
    }
    
    Tất cả các đoạn code nói trên sẽ đọc nội dung của tập tin và in nó ra màn hình. Các bạn có thể làm bất cứ điều gì bạn muốn khi các bạn đã đọc nó.

    Happy Learning !!
     

    Bình Luận Bằng Facebook

Chia sẻ trang này