如何使用Java NIO复制文件?

以下代码段显示了如何使用NIO API复制文件。的NIO(新IO)API是在java.nio.*包。它至少需要Java 1.4,因为此版本中首先包含了API。JAVA NIO是基于块的IO处理,而不是基于流的IO,后者是Java中的旧版本IO处理。

package org.nhooo.example.io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
import java.nio.ByteBuffer;

public class CopyFileExample {
    public static void main(String[] args) throws Exception {
        String source = "medical-report.txt";
        String destination = "medical-report-final.txt";

        FileInputStream fis = new FileInputStream(source);
        FileOutputStream fos = new FileOutputStream(destination);

        FileChannel inputChannel = fis.getChannel();
        FileChannel outputChannel = fos.getChannel();

        // 创建一个1024大小的缓冲区以缓冲数据
        // 从源文件复制到目标文件时。
        // 为了在这里创建缓冲区,我们使用了静态方法
        // ByteBuffer.allocate()
        ByteBuffer buffer = ByteBuffer.allocate(1024);

        // 在这里,我们开始读取源文件并将其写入
        //到目标文件。我们重复这个过程
        // 直到输入流通道的read方法返回
        // 没有(-1)。
        while (true) {
            // 读取数据块并将其放入缓冲区
            int read = inputChannel.read(buffer);

            //我们到达通道尽头了吗?如果是
            // 跳出while循环
            if (read == -1) {
                break;
            }

            // 翻转缓冲区
            buffer.flip();

            // 写入目标通道并清除缓冲区。
            outputChannel.write(buffer);
            buffer.clear();
        }
    }
}