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 | 苏骏强的博客
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 | 苏骏强的博客
- Java拷贝文件的例子(使用channel实现)
- Java——使用缓冲流实现文件的拷贝
- java实现文件拷贝
- Java实现文件拷贝
- java实现文件拷贝
- 使用mmap实现文件的拷贝
- 用java实现文件的拷贝
- 习题:用java实现文件的拷贝
- Java实现文件拷贝的方法
- JAVA-IO 文件拷贝功能的实现
- Java实现文件的拷贝复制
- JAVA IO流十种拷贝文件例子
- 文件拷贝的实现
- java文件的拷贝
- Java 文件的拷贝
- 使用文件流(FileStream)实现大文件的拷贝
- 使用FileStream文件流实现大文件的拷贝
- 利用JAVA实现文件拷贝
- Java序列化
- 程序员提升三要素
- uvaoj10010
- //九度OJ 教程59 矩阵二分求幂法之大幂
- Maven学习——修改Maven的本地仓库路径
- Java拷贝文件的例子(使用channel实现)
- 黑马程序员-java多线程
- java中Long类型数据必须转化为int才能正确比较
- 策略模式
- Struts2获取表单的三种常见的方法
- Linux常用命令大全
- Java Web Application 自架构 五 AOP概念的引入
- 关于List子类调用subList(int from,int end)出现类型转换异常
- Tomcat --> Cannot create a server using the selected type