美文网首页
java7新特性6——随机读写文件

java7新特性6——随机读写文件

作者: 不迷失 | 来源:发表于2017-04-08 11:22 被阅读665次

java7允许我们随机访问文件

1f2f7374e1990b4bb551fd141bc4a53d1f2f7374e1990b4bb551fd141bc4a53d

所谓随机访问就是允许我们不按照顺序的访问文件的内容,这里的访问包括读和写。

要随机的访问文件,我们就要打开文件,定位到指定的位置,然后读或写文件内容。

在Java7中,SeekableByteChannel接口提供了这个功能

SeekableByteChannel提供了一些简单易用的方法。依靠这些方法,我们能够设置或查询当前的位置,然后从当前位置读或者往当前位置写。

该接口提供的方法有:

position – 查询通道当前的位置
position(long) – 设置通道当前的位置
read(ByteBuffer) – 从通道向缓冲区读字节内容
write(ByteBffer) – 将缓冲区内的字节内容写入通道
truncate(long) – 截断连接到通道的文件(或其他实体)

FileChannel实现了该接口。

在实际的使用中,我们可以用FileChannel.open获取一个 FileChannel。

FileChannel提供了一些高级的特性,如将文件的一部分直接映射到内存中来提高访问速度、锁定文件的一部分、直接在指定的绝对位置读或写而不影响通道的当前位置等。

示例:

package java7;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

/**
 * @author qiang.xie
 * @date 2017/4/7
 */
public class SeekChannal {

    public static void main(String[] arg) throws IOException {
        FileChannel fileChannel=FileChannel.open(Paths.get("f:\\test.txt"),StandardOpenOption.WRITE,StandardOpenOption.READ,StandardOpenOption.CREATE);
        fileChannel.write(ByteBuffer.wrap("hello,java".getBytes()));
        fileChannel.position(0);//定位到文件开头
        fileChannel.write(ByteBuffer.wrap("seek".getBytes()));
        fileChannel.position(fileChannel.size());//定位到文件末尾
        fileChannel.write(ByteBuffer.wrap("end".getBytes()));

        //将通道中的指定位置开始的内容传输到另一个通道中,这里传输到控制台
       fileChannel.transferTo(1,fileChannel.size(),Channels.newChannel(System.out));
    }
}

该示例打开一个test.txt文件通道,先写入hello,java,然后再定位到文件开头,写入seek,这意味着会覆盖最开始的hell四个字符,然后定位到文件末尾,再写入end。然后通过transferTo将文件内容传入到控制台。

运行结果:

eeko,javaend

由于可以从指定位置读写文件,SeekableByteChannel使得我们有了很多想象空间。比如你可以使用多线程去从一个很大的文件中去查找某些内容等等。

--

@不迷失|知识改善生活

weixinweixin
微信公众号:java技术

专注技术研究与视频教学,分享有价值的技术与经验,关注程序员的发展!

--

技术博客:http://bumishi.cn

技术交流群:245130488

@不迷失教学视频

QQ课堂:http://bumishi.ke.qq.com

百度传课:http://chuanke.com/s3377987.html

相关文章

  • java7新特性6——随机读写文件

    java7允许我们随机访问文件 所谓随机访问就是允许我们不按照顺序的访问文件的内容,这里的访问包括读和写。 要随机...

  • Java11的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java15的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java12的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java7新特性及使用

    Java7新特性及使用 新特性列表 以下是Java7中的引入的部分新特性。 switch支持String try-...

  • 文件——随机读写

    文件位置标记及其定位 顺序读写文件时,每读写一个数据后,文件位置标记顺序向后移一个位置,然后在下一次执行读写操作时...

  • 随机读写文件

    //******** 注意:可移植性问题 ************//换行符不一样的问题,linux下为"\n",...

  • java7新特性5——监听文件变化

    要实现监听文件的变更然后马上做出响应,在Java7之前,除了不断的循环似乎没什么好办法,而且实现也很麻烦。Java...

  • 读写文件1

    //读写分为顺序读写(从文件开始读写)和随机读写(比如定位文件指示器后读取第1000个字节位置的字符) //***...

  • Android Q(10)在读写文件时引入的权限问题

    android Q对于文件读写引入了新特性,在这个版本中,READ_EXTERNAL_STORAGE和WRITE_...

网友评论

      本文标题:java7新特性6——随机读写文件

      本文链接:https://www.haomeiwen.com/subject/kudlattx.html