Java NIO 之 复制文件 案例

简介:

需求:实现文件的copy


练习目的:

  1.  了解JavaNIO知识,主要是关注一下FileInputStream,FileChannel,FileOutputStream,ByteBuffer 之间的关系

  2. 了解如何获取FileChannel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public  class  CopyFile {
     public  static  void  main(String[] args)  throws  Exception {
         String inFile =  "gitHub.txt" ;
         String outFile =  "gitHub2.txt" ;
         
         //获取源文件和目标文件的输入流、输出流
         FileInputStream fin =  new  FileInputStream(inFile);
         FileOutputStream fout =  new  FileOutputStream(outFile);
         
         //获取输入、输出通道
         FileChannel fcin = fin.getChannel();
         FileChannel fcout = fout.getChannel();
         
         //创建缓存区
         ByteBuffer buffer = ByteBuffer.allocate( 1024 );
         
         while  ( true ) {
         
             //清楚缓存区的数据,可以接收新的数据
             buffer.clear();
         
             //从输入通道中将数据读到缓冲区
             int  r = fcin.read(buffer);
         
             //read方法返回读取的字节数,可能为0, 如果该通道已经达到流的末尾,则返回-1
             if  (r == - 1 ) {
                 break ;
             }
         
             //flip方法,让缓冲区可以将新读入的数据写入另一个通道
             buffer.flip();
         
             //从缓存区 将数据写到 输出通道里
             fcout.write(buffer);
         }
         
         //最后关闭
         fcin.close();
         fout.close();
     }
}


总结如下:

  1. 数据的流向:

   wKioL1nIoFzhzlyJAAAtTtCepXQ467.png

  1. 什么时候调用FileChannel的read,write方法?

   根据数据的方向来确定

   wKioL1nIoRqjzAD7AABkbNmoa2E915.png  







   

    














本文转自故新51CTO博客,原文链接: http://blog.51cto.com/xingej/1968417,如需转载请自行联系原作者



相关文章
|
2月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
1月前
|
人工智能 Java 定位技术
人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
这篇文章通过一个使用ChatGPT实现的Java扫雷小游戏案例,展示了ChatGPT在编程领域的应用能力。文章中包含了扫雷游戏的Java代码实现,代码中初始化了雷区地图,随机放置雷,计算每个格子周围雷的数量,并提供了一个简单的文本界面与用户交互进行游戏。游戏通过控制台输入接受玩家的指令,并给出相应的反馈。
人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
|
24天前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
21 2
|
25天前
|
安全 Java API
精通 Java 后台开发:案例分析与实践
精通 Java 后台开发:案例分析与实践
31 2
|
1月前
|
Java
Java枚举使用的基本案例
这篇文章是关于Java枚举的基本使用,通过一个指令下发的代码案例,展示了如何定义枚举、使用枚举以及如何通过枚举实现指令的匹配和处理。
|
1月前
|
Java
"揭秘Java IO三大模式:BIO、NIO、AIO背后的秘密!为何AIO成为高并发时代的宠儿,你的选择对了吗?"
【8月更文挑战第19天】在Java的IO编程中,BIO、NIO与AIO代表了三种不同的IO处理机制。BIO采用同步阻塞模型,每个连接需单独线程处理,适用于连接少且稳定的场景。NIO引入了非阻塞性质,利用Channel、Buffer与Selector实现多路复用,提升了效率与吞吐量。AIO则是真正的异步IO,在JDK 7中引入,通过回调或Future机制在IO操作完成后通知应用,适合高并发场景。选择合适的模型对构建高效网络应用至关重要。
28 2
|
1月前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
1月前
|
前端开发 Java 测试技术
综合案例【商品管理系统-Java基础版】(附完整源码)
综合案例【商品管理系统-Java基础版】(附完整源码)
76 9
|
1月前
|
Java
Java数组的2个小案例(杨辉三角分析和商品管理增删改查)
Java数组的2个小案例(杨辉三角分析和商品管理增删改查)
44 4
|
19天前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
42 0