栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > Java面试题

介绍一下Java NIO, NIO读取文件都有哪些方法?

Java面试题 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

介绍一下Java NIO, NIO读取文件都有哪些方法?

NIO也就是New I/O,是一组扩展Java IO操作的API集, 于Java 1.4起被引入,Java 7中NIO又提供了一些新的文件系统API,叫NIO2.

NIO2提供两种主要的文件读取方法:

  • 使用buffer和channel类
  • 使用Path 和 File 类

NIO读取文件有以下三种方式:

1. 旧的NIO方式,使用BufferedReader  

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();            }        }    }}2. 使用buffer读取小文件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);        }    }}3. 分块读取大文件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 and clear/compact it.        }        inChannel.close();        aFile.close();    }}4. 使用MappedByteBuffer读取文件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();    }}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/264032.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号