Java NIO 之 复制文件 案例

需求:实现文件的copy

练习目的:

  1. 了解JavaNIO知识,主要是关注一下FileInputStream,FileChannel,FileOutputStream,ByteBuffer 之间的关系
  2. 了解如何获取FileChannel
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. 数据的流向:

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

根据数据的方向来确定

时间: 2024-10-11 22:54:25

Java NIO 之 复制文件 案例的相关文章

java nio 读取大文件

package com.yao.bigfile; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class ReadBig { public static final String fileName = "D://log//

java 7 使用java.nio.file.*操作文件

java7中辅助类Files新增了两个方法用于读去文件的全部行和全部字节.So..再也不用缓冲区了. 1 package java8_test; 2 3 import java.io.IOException; 4 import java.nio.file.Files; 5 import java.nio.file.Path; 6 import java.nio.file.Paths; 7 import java.util.List; 8 9 public class TestMain { 10

java删除文件夹 Java中实现复制文件或文件夹

删除文件夹 import java.io.File; public class DeleteDir { /** * @param args */ public static void main(String[] args) { File filedir = new File("D:\\360down"); deletedirect(filedir); System.out.println("over"); } /** * @param file */ private

java Io缓冲区复制文件

//直接写代码了  类和包自己导入创建 ,手打很累的 public static void main(String args[]){ FileReader fr=null;   //文件输入流 FileWriter fw=null;  //文件输出流 BufferedReader br=null;  //字符缓冲区输入流 BufferedWriter bw=null;    //字符缓冲区输出流 try{ File  f = new File("f:\\ha.txt"); fr =ne

java输入输出流复制文件所用时间对比

package com.edu.xynu; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class IOUnitCopy { //按字节 public st

使用java NIO进行读文件

 public static String readUseNIO(File file) {   FileInputStream fin;   String string = null;   try {    fin = new FileInputStream(file);    FileChannel channel = null;    channel = fin.getChannel();    // 文件内容的大小    int size = (int) channel.size();  

java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射

java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer. MappedByteBuffer是java nio引入的文件内存映射方案,读写性能极高.NIO最主要的就是实现了对异步操作的支持.其中一种通过把一个套接字通道(SocketChannel)注册到一个选择器(Selector)中,不时调用后者的选择(select)方法就能返回满足的选择键(SelectionKey

Java nio 的文件处理

一.创建一个大文件 下载文件时往往会创建一个指定大小的空文件 package com.lazy.nio; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file

java复制文件

package com.test.tes; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Date; /** * 复制文件到指定目录下 * @author Wdnncey * */ public class Copy { public static long forJava(File f1,File f2) throws Exceptio