VIII . 文件通道 ( FileChannel ) 直接使用 通道 拷贝文件 示例代码
1 . 示例需求 : 两个 文件通道 ( FileChannel ) 直接拷贝 ;
① 文件通道 ( FileChannel ) 获取 : NIO 中 , 文件通道 ( FileChannel ) 可以从 文件输入流 ( FileInputStream ) 中进行获取 , 也可以从 文件输出流 ( FileOutputStream ) 中获取 , 其本质是通过文件输入流 , 读取文件中的数据 ;
② 整体流程 :
先通过文件输入流获取 输入文件通道 ( FileChannel ) , 通过文件输出流获取 输出文件通道 ( FileChannel ) ;
直接将输入通道数据转移到输出通道 , 即可完成拷贝 ;
2 . 代码示例 :
package kim.hsl.nio; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; public class FileChannelDemo4 { public static void main(String[] args) { FileInputStream fis = null; FileOutputStream fos = null; try { //1 . FileChannel 可以从 FileInputStream 中获取 fis = new FileInputStream("file.txt"); fos = new FileOutputStream("file3.txt"); //2 . 创建 FileChannel , 从 FileInputStream / FileOutputStream 中可以获取到 //FileChannel 是抽象类 , 实际类型是 FileChannelImpl FileChannel fcIn = fis.getChannel(); FileChannel fcOut = fos.getChannel(); //3 . 直接将 fcIn 通道的内容写出到 fcOut 通道 fcOut.transferFrom(fcIn, 0, fcIn.size()); } catch (IOException e) { e.printStackTrace(); } finally { try { if(fis != null) fis.close(); if(fos != null) fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
执行结果 :