java中的FileChannel基本使用
2017-05-17 17:43
549 查看
一获取实例
二读取与写入数据
三关闭
四其它方法
position方法
size方法
truncate方法
force方法
我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个FileChannel实例。
也可以通过调用position(long pos)方法设置FileChannel的当前位置。
这里有两个例子:
如果将位置设置在文件结束符之后,然后试图从文件通道中读取数据,读方法将返回-1 —— 文件结束标志。
如果将位置设置在文件结束符之后,然后向通道中写数据,文件将撑大到当前位置并写入数据。这可能导致“文件空洞”,磁盘上物理文件中写入的数据间有空隙。
这个例子截取文件的前1024个字节。
force()方法有一个boolean类型的参数,指明是否同时将文件元数据(权限信息等)写到磁盘上。
二读取与写入数据
三关闭
四其它方法
position方法
size方法
truncate方法
force方法
一.获取实例
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个FileChannel实例。
//获取方式一 /*------------------------------通过RandomAccessFile来获取FileChannel------------------------------------*/ //RandomAccessFile in = new RandomAccessFile("/Users/kingboy/Desktop/hello.txt","rw"); //RandomAccessFile out = new RandomAccessFile("/Users/kingboy/Desktop/copy.txt","rw"); //FileChannel channelIn = in.getChannel(); //FileChannel channelOut = out.getChannel(); //获取方式二 /*------------------------------通过InputStream,OutputStream来获取FileChannel-----------------------------*/ FileInputStream in = new FileInputStream("/Users/kingboy/Desktop/hello.txt"); FileOutputStream out = new FileOutputStream("/Users/kingboy/Desktop/copy.txt"); FileChannel channelIn = in.getChannel(); FileChannel channelOut = out.getChannel();
二.读取与写入数据
ByteBuffer bf = ByteBuffer.allocate(4096); //如果读到文件末尾,则返回-1 int count; while ((count = channelIn.read(bf)) != -1){ //将缓存字节数组的指针设置为数组的开始序列即数组下标0。这样就可以从buffer开头,对该buffer进行遍历(读取)了。 bf.flip(); //对bf读取的数据进行操作 channelOut.write(bf);//写入另一个文件 //强制将内存中数据刷新到硬盘,boolean代表是否刷新属性 channelOut.force(true); //清空 bf.clear(); }
三.关闭
//关闭 channelIn.close(); channelOut.close();
四.其它方法
position方法
有时可能需要在FileChannel的某个特定位置进行数据的读/写操作。可以通过调用position()方法获取FileChannel的当前位置。也可以通过调用position(long pos)方法设置FileChannel的当前位置。
这里有两个例子:
long pos = channel.position(); channel.position(pos +123);
如果将位置设置在文件结束符之后,然后试图从文件通道中读取数据,读方法将返回-1 —— 文件结束标志。
如果将位置设置在文件结束符之后,然后向通道中写数据,文件将撑大到当前位置并写入数据。这可能导致“文件空洞”,磁盘上物理文件中写入的数据间有空隙。
size方法
FileChannel实例的size()方法将返回该实例所关联文件的大小。如:long fileSize = channel.size();
truncate方法
可以使用FileChannel.truncate()方法截取一个文件。截取文件时,文件将中指定长度后面的部分将被删除。如:channel.truncate(1024);
这个例子截取文件的前1024个字节。
force方法
FileChannel.force()方法将通道里尚未写入磁盘的数据强制写到磁盘上。出于性能方面的考虑,操作系统会将数据缓存在内存中,所以无法保证写入到FileChannel里的数据一定会即时写到磁盘上。要保证这一点,需要调用force()方法。force()方法有一个boolean类型的参数,指明是否同时将文件元数据(权限信息等)写到磁盘上。
相关文章推荐
- java.nio.channels.FileChannel 使用笔记
- JavaIO File的基本使用
- java.io.File的基本使用以及关于Windows中大小写问题
- Java千百问_02基本使用(012)_如何编写非阻塞SocketChannel程序
- 明日工作中需要用到的两个方法 java中File的基本使用
- java学习笔记-File类的基本使用
- Java中File类的基本使用详解
- FileChannel类的理解和使用(java.nio.channels.FileChannel)
- java.io.File类基本使用——遍历某路径的所有文件夹及文件
- FileChannel的基本使用
- java的FileChannel使用方法。
- Java_java中FileWriter和FileReader类(基本使用方法)
- Java FileFilter抽象类的使用
- FusionCharts在Java中的基本使用(2)
- H2数据库在JAVA(JDBC)中的基本使用
- java对File基本操作
- java File的基本操作实例(目录及文件的 新建/拷贝/移动)
- 使用 ServerSocketChannel 实现的 File 服务器
- H2数据库在JAVA(JDBC)中的基本使用
- Oracle内建包UTL_FILE使用说明(转 http://www.blogjava.net/liwei/archive/2007/01/10/92902.aspx)