使用NIO来操作文件

JAVANIO主要用于对文件的读写操作,效率也比普通IO要高一些。在对文件的操作中,不但支持Byte格式的操作,还支持整数,浮点等基本类型的操作,非常方便。在对大文件的操作中,其特有的文件映射概念可以不用将整个文件都读入内存,就能够对文件的任意位置进行读写,非常的棒。下面我们就来简单的看一下如何使用NIO来操作文件。

NIO对文件的理解与普通IO不同,它将文件抽象为一个通道,也就是FileChannel,而不是流。程序员不能直接与FileChannel打交道,需要通过一个称之为缓冲器的东西,也就是ByteBuffer来对通道进行读写。换句话说,通道和缓冲器是NIO中两个非常重要的概念,正确的理解这两个概念对学习使用NIO是非常重要的。用《JAVA编程思想》里面的话来讲,通道就好像煤矿,所有的资源都蕴藏在通道中,而程序员是煤矿老板(注意哈,不是矿工,是老板),老板肯定不是亲自下去挖煤,而是通过矿工推着小车把煤弄上来。矿工的死活老板是不关心的,老板只关心车里的煤。而缓冲器就是车,所以你只需要和缓冲器打交道就行了,需要什么东西就找缓冲器要,想扔掉什么东西就往缓冲器里面扔。当然,对于煤矿你也是要关心一下的,因为煤矿很大,选择一个恰当的挖煤的地点也是很重要的。下面就来看一下NIO的一些经典应用:

1、          顺序写入文本文件:

//构造一个文件通道

FileChannel fc1 = new FileOutputStream("d://aa.txt").getChannel();

//使用wrap方法构造一个临时缓冲器,专门用来存储字符串

fc1.write(ByteBuffer.wrap("hello world".getBytes()));

//不要忘记关闭文件

fc1.close();

 

2、          随机写入基本数据,如整数:

//构造随机访问的文件通道

FileChannel fc2 = new RandomAccessFile("d://bb.txt", "rw").getChannel();

//构造缓冲器,需要指定大小,单位为Byte

ByteBuffer bb = ByteBuffer.allocate(1024);

//向缓冲器第4个字节处写入整数,若省略位置参数则表示0

bb.putInt(4, 65);

//将缓冲器的limit设置为实际大小,pos设为0,对缓冲器写入操作结束后,必调用此方法。

bb.flip();

//将缓冲器的内容写入到通道的偏移量为8的位置。

fc2.write(bb, 8);

//关闭通道

fc2.close();

 

3、          随机读入基本数据:

FileChannel fc3 = new RandomAccessFile("d://bb.txt", "rw").getChannel();

ByteBuffer bb1 = ByteBuffer.allocate(1024);

fc3.read(bb1);

//再强调一遍,凡是对缓冲器进行了写操作后,必调用此方法。

bb1.flip();

int x = bb1.getInt();

System.out.println(x);

 

4、          使用视图缓冲器:

   就不详细说了,只说说注意事项,对视图缓冲器数据的修改,直接等价于对ByteBuffer的修改;但是,对视图缓冲器poslimit信息的修改,不会影响到ByteBufferposlimit,非常有必要手动设置ByteBufferposlimit

 

5、          存储器映射文件:

//连通道都省了,直接创建一个映射缓冲器,与文件的映射关系可以通过参数来设置。之后对这个缓冲器的任何操作都等同于对文件的操作,操作方法同上,真是方便啊!!!!

MappedByteBuffer out = new RandomAccessFile("d://bb.txt", "rw").getChannel().map(FileChannel.MapMode.READ_WRITE, 0, 0xffffff);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值