Java拷贝文件的例子(使用channel实现)

来源:互联网 发布:steam充值卡 淘宝 编辑:程序博客网 时间:2024/04/30 04:05
题,本代码是通过使用JAVA中的Channel实现的拷贝文件的例子,代码中的注释已经比较清晰说明了其实现过程:


public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream(new File("./NioTestFile.txt"));
FileChannel fileChannel = in.getChannel();// 源文件的通道

FileOutputStream out = new FileOutputStream(new File(
"./NioTestFileNew.txt"));// copy文件的通道
FileChannel fileChannelout = out.getChannel();

ByteBuffer buffer = ByteBuffer.allocate(50);// 缓冲区允许的最大容量

while (true) {
buffer.clear();// 先清空上一次所写进缓冲区的数据
int r = fileChannel.read(buffer);// 读取新的数据

System.out.println(r);// 把读取的数组大小打印出来

if (r <= 0) {
// r的值可以为0或-1
// 0:表示缓冲区的容量已满,不能往bufer中写数据了(因此把一部分数据copy完后,要将前面的clear掉)
// -1:channel中的数据已经写完
System.out.println("read finished.");
break;
}

buffer.flip();// 可以理解为"换"一个channel,此时相当于对缓冲区里的所有数据"写"向其他channel
fileChannelout.write(buffer);// 向channel中写入数据
}

}


从打印出的信息可以看出来,50是表示缓冲区所读取的最大容量,也就是代码中ByteBuffer.allocate(50)所设置的,当读取到数据的最后一段时,该值必定小于50,如上面所打印的27,此时表示数据已经读取完了,继续读取则会返回-1,因此,此时可以判断数据已经读取完了,可以把数据流方向flip到另外一条channel中,实现”写”的操作~~

本文简单介绍了通过channel实现数据读取和写出(也就是实现”拷贝”)的过程,代码非常简单,仅供参考学习,有什么问题请指出~

原文链接: http://www.sujunqiang.com/archives/174.html | 苏骏强的博客
原创粉丝点击