跟我学NIO(利用NIO实现文件复制)

在使用传统IO方式进行大文件复制时,效率很低。因为传统IO每次只复制一个字节,下面将会介绍如何使用java的NIO实现文件复制。java的NIO每次复制一个缓冲区到另一个文件,这个缓冲区大小有用户自己定义,因此效率要比传统IO好很多。

跟我学NIO(利用NIO实现文件复制)

在使用传统IO方式进行大文件复制时,效率很低。因为传统IO每次只复制一个字节,下面将会介绍如何使用java的NIO实现文件复制。java的NIO每次复制一个缓冲区到另一个文件,这个缓冲区大小有用户自己定义,因此效率要比传统IO好很多。实例将reader.txt文件的内容复制到reader_output.txt文件。代码如下:

package com.bug315.nio;

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

public class CopyFile {

	public static void main(String[] args) {
		FileInputStream input = null;
		FileOutputStream output = null;
		FileChannel fci = null;
		FileChannel fco = null;
		try {
			input = new FileInputStream(new File("document/reader.txt"));
			output = new FileOutputStream(new File("document/reader_output.txt"));
			fci = input.getChannel();
			fco = output.getChannel();
			
			// 读取文件内容
			ByteBuffer buffer = ByteBuffer.allocate(1024);
			int len = fci.read(buffer);
			while ( len != -1 ) {
			    // 反转缓冲区,即将读取开始下标设置为0
				buffer.flip();
				// 将数据写入到输出通道
				fco.write(buffer);
				// 将缓冲区清空
				buffer.clear();
				len = fci.read(buffer);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if ( output != null ) {
				try {
					output.close();
					output = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if ( fco != null ) {
				try {
					fco.close();
					fco = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if ( input != null ) {
				try {
					input.close();
					input = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if ( fci != null ) {
				try {
					fci.close();
					fci = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		} // 
		
	}
}
勇气通往天堂,怯懦通往地狱。——塞内加
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号